Freemarker:从日期转换为POSIX时间

时间:2017-05-03 16:52:30

标签: date posix freemarker

如何从日期转换为POSIX时间?

日期格式不重要(“2016-02-12”,“2017年5月3日下午7:45:00”和其他任何内容。)

PS。我需要过去一天,所以我决定将其转换为posix并减去86400。

2 个答案:

答案 0 :(得分:0)

如果您的值为String(而不是java.util.Date),首先需要将其转换为日期或日期时间类型的值(基本上为java.util.Date) 。该操作分别以myString?datemyString?datetime完成,date_formatdatetime_format FreeMarker配置设置必须与myString中使用的格式相匹配。或者,您可以指定ad-hoc格式,例如myString?datetime('MMM d, yyyy h:mm:ss a')。有关日期/时间/日期时间格式字符串的详细信息,请参阅http://freemarker.org/docs/ref_directive_setting.html#topic.dateTimeFormatSettings。此外,由于示例字符串中没有时区信息,因此必须确保将time_zone配置设置设置为应解释字符串的时区。

现在您已拥有日期或日期时间值,您可以将UNIX纪元作为myDateOrDateTime?long转换为 milli 秒。虽然POSIX使用秒数,但您需要(millisSinceEpoch / 1000)?floor

所以尽可能长的表达式就像myString?datetime('MMM d, yyyy h:mm:ss a')?long / 1000)?floor,但你当然希望从中创建一个FreeMarker #function

另请注意,FreeMarker默认为人类打印数字,因此可能会打印1,493,865,900之类的内容。为防止这种情况,请在表达式的末尾应用?c

答案 1 :(得分:0)

此功能自2011年以来就已内置。

  

?long现在可用于日期,日期时间或时间值,并返回   自纪元以来的毫秒数(如java.util.Date.getTime())。

请参阅:https://freemarker.apache.org/docs/versions_2_3_17.html