如何使用Freemarker计算两个ISO8601日期之间的天数差异?

时间:2012-07-10 11:11:03

标签: datetime freemarker

我在Freemarker中有一个对象,其日期为ISO8601格式(例如2012-02-01T13:01:02+0000),我如何计算它与现在之间的天数差异?

在其他非Java场景中,我将其重新格式化为unix时间戳并进行数学运算(如RoR或Symfony中的distance_of_time_in_words函数),但据我所知,Freemarker无法转向ISO8601时间戳到unix时间戳。

是的,我意识到模板层可能不适合做这种事情,但需要等等。

1 个答案:

答案 0 :(得分:8)

如果天数不同,则表示两个日期之间经过了24小时的次数,那么这个表达式就是这样(你需要至少FreeMarker 2.3.17 ?long才能这样工作):

(
  (
    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)