【问题标题】:Freemarker convert timestamp in milliseconds to date with time zoneFreemarker 以毫秒为单位将时间戳转换为带有时区的日期
【发布时间】:2021-09-29 21:23:42
【问题描述】:
我可以使用以下格式将毫秒转换为日期:
${createdTime?number_to_datetime?string("yyyy-MM-dd HH:mm:ss")}
输出为:2021-07-22 11:02:38
现在我想给它添加一个时区Asia/Colombo,有什么方法可以给freemarker number_to_datetime格式添加一个时区?
【问题讨论】:
标签:
freemarker
datetime-format
【解决方案1】:
从 2.3.31 开始,您不能直接将时区传递给 ?string。 (你可以到?iso(timeZone),和它的朋友,但那些输出只用ISO格式。)
但是,您可以使用<#setting time_zone='Asia/Colombo'> 更改时区。之后,所有内容都将在该时区格式化(我的意思是在同一顶级模板执行期间)。不过,这可能是不需要的,你想把它改回原来的样子。在这种情况下,想法是这样的:
<#macro withTimeZone tz>
<#local lastTZ = .time_zone>
<#setting time_zone = tz>
<#nested>
<#setting time_zone = lastTZ>
</#macro>
所以现在你可以这样做了:
<@withTimeZone "Asia/Colombo">${.now?string('yyyy-MM-dd HH:mm:ss')}</@>
当然,你也可以用这个包围更大的模板部分。
请注意,.time_zone 是在 FreeMarker 2.3.31 中添加的。