Stringtemplate - 如何将日期格式设置为本地格式

5

我正在使用基于Stringtemplate4 (ST)的ExcelExplorer处理Excel文件。

这些文件包含多个日期列。默认情况下,日期将按照"MM/dd/yy"日期格式呈现。

有没有方法可以将日期呈现为"dd/MM/yyyy"?

我已经尝试了几种方法:

  • 我尝试通过命令行来定义它,但没有成功。
    • 定义LC_ALL=fr_FR不起作用。
    • 定义LC_TIME="dd/MM/yyyy"也不起作用。请参见设置java区域设置
    • 调用Java时使用以下命令行选项也不起作用。

java -Duser.language=fr -Duser.country=FR -Duser.variant=UTF-8 ...

我尝试了以下模板,但没有成功:

renderRow(row) ::= <<

<row.MyDate; format="dd/MM/yyyy"> 
>>

尽管属性MyDate被定义为日期类型,但上述方法并不起作用。我不想像在“格式化字符串模板电子邮件”中建议的那样在Java中定义MyDate为日期类型。
注意:经检查,发现ExcelExporter / ST将属性MyDate定义为日期类型!
以下模板也无法工作:
renderRow(row; format="dd/MM/yyyy") ::= <<

<row.MyDate> 
>>

2
阅读了在字符串模板电子邮件中格式化日期的文章后,解决此问题的正确方法是在Java中添加一个属性方法,同时保持模板不变。这种解决方案严格维护了模型-视图分离。 - Eric Belpaire
1个回答

0

你需要为每个你想要格式化的类添加一个渲染器到你的STGroup中:

    dir = STGroupDir(templateDirectory, '$', '$')
    dir.registerRenderer(Number.class, NumberRenderer())
    dir.registerRenderer(Date.class, DateRenderer())

现在,在我的模板中,我可以使用

<row.MyDate; format="dd/MM/yyyy"> 格式字符串与 java.text.SimpleDateFormat 一起使用

或者

<row.MyNumber; format="%,d"> 格式字符串与 java.util.Formatter 一起使用

如果您需要自定义格式化程序,请查看 DateRenderer,创建自己的格式化程序非常简单。

这是文档:

https://github.com/antlr/stringtemplate4/blob/master/doc/renderers.md


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接