我是 freemarker 新手。
在freemarker中,我想对DateTime执行算术表达式如下:
${triggerTimestamp}-1h
但这不起作用。有人可以帮忙吗?
FreeMarker 不执行开箱即用的日期/时间算术(至少从 2.3.30 开始)。数据模型(上下文)预计包含您实际想要显示的值。不过,我们可以在 Java 中实现一些辅助方法。
您将想要探索将日期转换为 unix/纪元时间。如果将
?long
添加到变量的末尾,您会将日期时间转换为纪元时间(以秒为单位),然后进行数学运算并将其转换回日期。你的例子是
${(triggerTimestamp?long - 1 * 1000 * 60 * 60)?number_to_datetime?string.iso}
由于没有任何内置函数,您可以创建一些函数来添加/删除日期等。
这是一个减去天数的函数:
<#function subtractDays date days>
<#assign timeInMilliseconds = (1000 * 60 * 60 * 24 * days) >
<#assign aDate = date?long - timeInMilliseconds?long>
<#return aDate?number_to_date>
</#function>
用途:
<#assign currentDate = .now>
<#assign oneDayBefore = subtractDays(currentDate, 1) >