【问题标题】:Stringtemplate - How to set date format to locale formatStringtemplate - 如何将日期格式设置为语言环境格式
【发布时间】:2017-12-08 01:14:12
【问题描述】:

我正在使用基于 Stringtemplate4 (ST) 的 ExcelExplorer 处理 Excel 文件。 这些文件包含几个带有日期的列。 默认情况下,日期按照“MM/dd/yy”日期格式呈现。

有没有办法将日期呈现为“dd/MM/yyyy”?

我尝试了多种方式:

  • 我尝试通过命令行定义它,但没有成功。
    • 定义 LC_ALL=fr_FR 不起作用。
    • 定义 LC_TIME="dd/MM/yyyy" 不起作用。 见Setting java locale settings
    • 使用以下命令行选项调用 java 不起作用。

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

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

renderRow(row) ::= <<

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

虽然属性 MyDate 被定义为 Date 类型,但上述不起作用。我不想按照Format date in String Template email 中的建议将 MyDate 定义为 Java 中的 Date 类型

注意:经过检查,我发现 ExcelExporter/ST 将属性 MyDate 定义为 Date 类型!

以下模板也不起作用:

renderRow(row; format="dd/MM/yyyy") ::= <<

<row.MyDate> 
>>

【问题讨论】:

  • 看完[Format date in String Template email] (stackoverflow.com/questions/2728623/…)的文章后,解决这个问题的正确方法是在java中添加一个属性方法,同时保持模板不变。该解决方案严格保持模型视图分离。

标签: java excel date date-format stringtemplate-4


【解决方案1】:

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

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

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

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

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

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

这是文档:

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

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多