2012-07-10 266 views
2

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

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

是的,我明白了模板层可能不是在做这种事情的正确的地方,但需要必须等

回答

7

如果差异在天,你的意思是多少时间为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)

+0

内建'?new()'是做什么的?我无法在FM文档中看到它 – BenLanc 2012-07-16 11:01:53

+0

http://freemarker.org/docs/ref_builtins_expert.html#ref_builtin_new – ddekany 2012-07-17 08:38:35

相关问题