我在 Freemarker 中有一个对象,其日期采用 ISO8601 格式(例如 2012-02-01T13:01:02+0000
),我将如何计算它之间的天数差异现在呢?
在其他非 Java 场景中,我会将其重新格式化为 unix 时间戳并进行数学运算(如 RoR 或 Symfony 中的 distance_of_time_in_words
函数),但据我所知,Freemarker 是无法将 ISO8601 时间戳转换为 unix 时间戳。
是的,我意识到模板层可能不是做这种事情的正确位置,但需要必须等等。
最佳答案
如果您所说的天数差异是指两个日期之间相隔 24 小时的次数,则此表达式可以实现这一目的(?long
至少需要 FreeMarker 2.3.17 才能像这样工作):
(
(
s2?datetime("yyyy-MM-dd'T'HH:mm:ssZ")?long
- s1?datetime("yyyy-MM-dd'T'HH:mm:ssZ")?long
) / (1000 * 60 * 60 * 24)
)?int
更好的方法是在 Java 中通过实现 TemplateMethodModelEx
来实现该功能。 。模板可以通过 <#assign distanceInDays = 'com.example.DistanceInDaysMethod'?new()>
将其引入(将其放入常用的 #include
-d 或 #import
-ed 文件中)然后您可以将其用作 distanceInDays(s1, s2)
.
关于datetime - 如何使用 Freemarker 计算两个 ISO8601 日期之间的天数差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11412040/