String Freemarker ISO字符串到带时区的日期时间
我需要以所需的格式显示下面的“字符串” 字符串str=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”)-错误:应为方法
1979-01-24T00:00:00.000-08:00
所需格式:
1979年1月24日太平洋标准时间上午00:00:00
注:str中的tz可以是不限于PST的任何tz尝试了以下操作,但均无效:
-输出为str?datetime.iso
-这以我需要的格式显示日期时间,但时间正在从PST转换为CST1979年1月24日凌晨2:00 CST
-错误:应为方法,但已计算为字符串str?string(“MMM-dd,yyyy-hh:mm:ss a zzz”)
-错误:不可解析的日期:“1979-01-24T00:00:00.000-08:00”str?datetime?字符串(“mmmdd,yyyy hh:mm:ss a zzz”)
-str?datetime
-时区已更改1979-01-24T02:00:00-06:00
${str?datetime.iso}
这里的问题是FreeMarker将日期/时间值解析为java.util.date
(及其子类),不再存储时区,因为它总是以UTC格式存储值。因此,解析后信息丢失。从2.3.30开始,我看到的唯一解决方案是使用Java(使用Java 8ZoneDateTime
)。我是否可以向函数提供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}