我需要在免费标记模板中将 UTC 日期时间转换为 JST 日期时间,任何人都可以指导如何做到这一点。
我正在使用带有freemarker组合的smooks。
提前感谢您的建议。
我需要在免费标记模板中将 UTC 日期时间转换为 JST 日期时间,任何人都可以指导如何做到这一点。
我正在使用带有freemarker组合的smooks。
提前感谢您的建议。
FreeMarker 有一个time_zone
设置,它会Date
在那个时区自动显示 Java -s。如果在您的环境中没有正确设置它,您可以在模板中强制它<#setting time_zone="JST">
,但这样做有点难看。
如果 UTC 日期时间以字符串形式出现,那么首先您必须告诉 FreeMarker 将该字符串解析为日期时间,例如myUTCDate?datetime('yyyy-MM-dd HH:mm:ss')
; 我不知道你的情况的确切模式是什么。但是如果它不包括时区,那么你在这里会遇到一些麻烦,因为它将在JST
时区中解释。在那种情况下,你可以这样做(myUTCDate + ' UTC')?datetime('yyyy-MM-dd HH:mm:ss z')
。当然,如果你经常这样做,你最好把这个烂摊子放到一个#function
.
更新:
我原来的答案有一个错误:它使用hh
这意味着 0-12 小时没有a
. 我已将其更改HH
为 0-23 小时。这也是我做的一个测试。对我来说很好:
<#setting time_zone='JST'>
<#setting datetime_format='yyyy-MM-dd HH:mm:ss'>
Current time (Java Date object):
Local time non-ISO: ${.now}
UTC ISO: ${.now?iso_utc}
Local ISO: ${.now?iso_local}
Local ISO without zone: ${.now?iso_local_nz}
<#assign myUTCDate = '2010-05-15 10:00:00'>
Interperted as local, printed as local: ${myUTCDate?datetime}
Interperted as UTC, printed as local: ${(myUTCDate + ' UTC')?datetime('yyyy-MM-dd HH:mm:ss z')}
打印:
Current time (Java Date object):
Local time non-ISO: 2013-11-10 01:34:00
UTC ISO: 2013-11-09T16:34:00Z
Local ISO: 2013-11-10T01:34:00+09:00
Local ISO without zone: 2013-11-10T01:34:00
Interperted as local, printed as local: 2010-05-15 10:00:00
Interperted as UTC, printed as local: 2010-05-15 19:00:00
该文档有一整节专门介绍 iso_ http://freemarker.org/docs/ref_builtins_date.html的日期和函数
但是,该文档并未提及您可以将这些方法链接在一起的事实。即使这是 freemarker 隐含的。例如:
"2013-11-09T16:34:00Z"?datetime?iso_local 采用 UTC 日期字符串将其转换为日期时间,然后使用本地设置打印出来。