2012-07-10 74 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

相關問題