String Freemarker ISO字符串到带时区的日期时间

String Freemarker ISO字符串到带时区的日期时间,string,datetime,freemarker,iso,String,Datetime,Freemarker,Iso,我需要以所需的格式显示下面的“字符串” 字符串str=1979-01-24T00:00:00.000-08:00 所需格式:1979年1月24日太平洋标准时间上午00:00:00 注:str中的tz可以是不限于PST的任何tz 尝试了以下操作,但均无效: str?datetime.iso-输出为1979年1月24日凌晨2:00 CST-这以我需要的格式显示日期时间,但时间正在从PST转换为CST str?string(“MMM-dd,yyyy-hh:mm:ss a zzz”)-错误:应为方法

我需要以所需的格式显示下面的“字符串”

字符串str=
1979-01-24T00:00:00.000-08:00

所需格式:
1979年1月24日太平洋标准时间上午00:00:00

注:str中的tz可以是不限于PST的任何tz
尝试了以下操作,但均无效:

  • str?datetime.iso
    -输出为
    1979年1月24日凌晨2:00 CST
    -这以我需要的格式显示日期时间,但时间正在从PST转换为CST

  • str?string(“MMM-dd,yyyy-hh:mm:ss a zzz”)
    -错误:应为方法,但已计算为字符串

  • str?datetime?字符串(“mmmdd,yyyy hh:mm:ss a zzz”)
    -错误:不可解析的日期:“1979-01-24T00:00:00.000-08:00”

  • str?datetime
    -
    1979-01-24T02:00:00-06:00
    -时区已更改


时区可通过以下设置进行配置,请参阅其文档


${str?datetime.iso}

这里的问题是FreeMarker将日期/时间值解析为
java.util.date
(及其子类),不再存储时区,因为它总是以UTC格式存储值。因此,解析后信息丢失。从2.3.30开始,我看到的唯一解决方案是使用Java(使用Java 8
ZoneDateTime
)。

我是否可以向函数提供tz偏移(-08:00)以保留tz。与Java相比,我更喜欢在ftl中进行转换。类似于“datetime.iso(tzoffset)”的东西。偏移量=08:00@harsh_t不,没有这样的选择。也许两者都不会,因为当FreeMarker“本机”支持
ZoneDateTime
等时,这个问题就会解决。如果真的必须完全用FTL来完成,也许你可以做一个难看的破解:在解析之前删除时区,然后在格式化之后再放回去。
<#setting time_zone ="PST">
<#assign str = "1979-01-24T00:00:00.000-08:00">
${str?datetime.iso}