您好-我在ClickDimensions模板中使用FreeMarker,但在强制日期时间使用正确的时区时遇到一些问题。我在模板顶部有这个:
<#setting time_zone="Canada/Pacific">
我已经玩了一点,将其设置为不同的区域(例如“ America / New_York”),当我称呼它时它可以正确地调整时间:
${.now}
太好了。但是 ...我有一个变量('startdate'),其中保存有从Microsoft Dynamics实例提取的日期时间值。由于某种原因,它认为这是太平洋日期时间(偏移量是-07:00),但不是,它是UTC。
这是我写的一些例子:
${startdate}
${startdate?datetime("M/d/yyyy h:mm a")}
${startdate?datetime("M/d/yyyy h:mm a")?string.iso_m}
${startdate?datetime("M/d/yyyy h:mm a")?string.iso_m_nz}
${startdate?datetime("M/d/yyyy h:mm a")?string.iso_m_nz_u}
这就是我收到的:
第三行揭示了问题-datetime偏移量不正确。它应显示为+00:00,而不是-07:00。
如何更改与日期时间关联的偏移量?
问题是您解析为日期时间的字符串不包含时区或偏移量。从datetime
技术上讲java.util.Date
(不是java.time.LocalDateTime
,可以高兴地保持对时区的了解),FreeMarker必须盲目假定某个时区,而这就是当前时区。
至少从2.3.30版开始,没有的“如果解析的字符串不包含该信息,请假定该时区”选项?datetime
。
真正正确的解决方案是将这些日期作为java.util.Date
-s而不是字符串放入数据模型中。理想情况下,将字符串解析为任何对象(java.util.Date
在这种情况下为)都不是模板的职责。
如果您必须在模板内部解决此问题,因为无论如何该字符串的格式都很难连接到模板中,因此您可以执行以下操作:
<#function parseMsDynDateTime(s)>
<#return (startdate + " +0000")?datetime("M/d/yyyy h:mm a Z")>
</#function>
然后
${parseMsDynDateTime(startdate)?string.iso_m}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句