4

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

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

提前感谢您的建议。

4

2 回答 2

3

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
于 2013-11-07T22:26:39.457 回答
1

该文档有一整节专门介绍 iso_ http://freemarker.org/docs/ref_builtins_date.html的日期和函数

但是,该文档并未提及您可以将这些方法链接在一起的事实。即使这是 freemarker 隐含的。例如:

"2013-11-09T16:34:00Z"?datetime?iso_local 采用 UTC 日期字符串将其转换为日期时间,然后使用本地设置打印出来。

于 2014-03-04T02:54:52.920 回答