我要求在免费标记模板中将UTC日期时间转换为JST日期时间,任何人都可以指导如何做到这一点。
我正在使用带有freemarker组合的smooks。
提前感谢您的建议。
答案 0 :(得分:3)
FreeMarker具有time_zone
设置,并在该时区自动显示Java Date
- 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
表示没有a
的0-12小时。我已将其更改为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
答案 1 :(得分:1)
该文档有一整节专门介绍iso_ http://freemarker.org/docs/ref_builtins_date.html
的日期和函数但是,文档并未提及您可以将方法链接在一起的事实。即使这与freemarker隐含在一起。例如:
“2013-11-09T16:34:00Z”?datetime?iso_local以UTC日期取一个字符串,将其转换为datetime,然后使用本地设置打印出来。