使用时区显示自由标记格式的时间



我需要显示两个不同时区的时间。

以下内容有效,但芝加哥时间的格式很丑陋:

<p><b>Report performed (Belfast): </b> ${.now?string["EEEE, MMMM dd, yyyy, hh:mm a '('zzz')'"]}</p>
<p><b>Report performed (Chicago): </b> ${.now?iso('America/Chicago')}</p>

结果:

Report performed (UTC): Apr 23, 2019 12:08:27 PM
Report performed (Chicago): 2019-04-23T06:08:27-05:00

尝试连接会导致错误:

<p><b>Report performed (Chicago): </b> ${.now?iso('America/Chicago')?string["EEEE, MMMM dd, yyyy, hh:mm a '('zzz')'"]}</p>
12:30:18.307 [main] ERROR freemarker.runtime - Error executing FreeMarker template

freemarker.core.NonHashException: for "...[...]"左操作数:预期为哈希,但这已计算为字符串(包装器:f.t.SimpleScalar): ==> .now?iso('America/Chicago')?string [在模板"emailTemplate.ftl"的第80行,第54列]


FTL 堆栈跟踪("~"表示与嵌套相关):

- 失败于: ${.now?iso("美国/芝加哥")?字符串[... [在模板"电子邮件模板.ftl"中,第 80 行,第 52 列]

at freemarker.core.DynamicKeyName.dealWithStringKey(DynamicKeyName.java:142) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.DynamicKeyName._eval(DynamicKeyName.java:75) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.Expression.eval(Expression.java:81) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:96) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.DollarVariable.accept(DollarVariable.java:59) ~[freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.Environment.visit(Environment.java:327) [freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.Environment.visit(Environment.java:333) [freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.core.Environment.process(Environment.java:306) [freemarker-2.3.25-incubating.jar:2.3.25]
at freemarker.template.Template.process(Template.java:386) [freemarker-2.3.25-incubating.jar:2.3.25]
at mycode...

我相信你不能一次性做到这一点,因为.iso或任何日期格式它都会返回字符串。 默认情况下,您可以在 FTL 中指定time_zone并执行日期格式。

<#setting time_zone="America/Chicago">
<#assign aDateTime = .now>
${aDateTime?string["EEEE, MMMM dd, yyyy, hh:mm a '('zzz')'"]}

它提供输出Tuesday, April 23, 2019, 07:35 AM (CDT)

如需进一步参考,请查看此文档

最新更新