在freemarker模板中将UTC日期时间转换为JST日期时间

时间:2013-11-06 17:02:42

标签: freemarker

我要求在免费标记模板中将UTC日期时间转换为JST日期时间,任何人都可以指导如何做到这一点。

我正在使用带有freemarker组合的smooks。

提前感谢您的建议。

2 个答案:

答案 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,然后使用本地设置打印出来。