【问题标题】:convert UTC datetime to JST datetime in freemarker tempate在freemarker模板中将UTC日期时间转换为JST日期时间
【发布时间】:2013-11-18 01:09:53
【问题描述】:

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

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

提前感谢您的建议。

【问题讨论】:

  • 您的 dateTime 是否在 java.util.Date 实例中?你已经尝试过什么?请发布不适合您的 FTL。

标签: freemarker


【解决方案1】:

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,这意味着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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多