Freemarker 将以毫秒为单位的时间戳转换为带时区的日期
Freemarker convert timestamp in milliseconds to date with time zone
我可以使用以下格式将毫秒转换为日期:
${createdTime?number_to_datetime?string("yyyy-MM-dd HH:mm:ss")}
输出为:2021-07-22 11:02:38
现在我想给它加一个时区Asia/Colombo
,请问有什么办法可以给freemarker number_to_datetime
格式加一个时区吗?
从 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 中添加的。
我可以使用以下格式将毫秒转换为日期:
${createdTime?number_to_datetime?string("yyyy-MM-dd HH:mm:ss")}
输出为:2021-07-22 11:02:38
现在我想给它加一个时区Asia/Colombo
,请问有什么办法可以给freemarker number_to_datetime
格式加一个时区吗?
从 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 中添加的。