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

标签 datetime freemarker

我在 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/

相关文章:

php - 离任何日期还有多少天?

JavaScript 转换 yyyy-mm-ddTHH :MM:SS to DAY of week (MON) HH:MM AM/PM

c# - 异常 "String was not recognized as a valid DateTime"

java - authentication.getName() 在自定义 AuthenticationProvider 中返回 null

java - 在 Freemarker 中将 BigDecimal 转换为 Short

java - 如何将一个 DropWizard(带有 freemarker) View 嵌入到另一个 View 中?

python - 在 DateTime 系列中使用 np.select - Pandas Python

java - java.time API 如何确定政府对区域规则的更改?

java - 检查常量值的 Freemarker 模板

java - Freemarker 配置问题(Maven 编译失败)