【问题标题】:How do I calculate the difference in days between two ISO8601 dates with Freemarker?如何使用 Freemarker 计算两个 ISO8601 日期之间的天数差异?
【发布时间】:2012-07-09 20:30:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: datetime freemarker


    【解决方案1】:

    如果用天数来表示两个日期之间经过了多少次 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)

    【讨论】:

    • 内置的?new() 有什么作用?我在 FM 文档中看不到它
    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多