我有两个问题,或者可能有两种不同的解决方法。我收到了像2015-11-17T17:10:24-0800的ISO字符串。最终目标是在某些Freemarker生成的某些HTML中将字符串显示为11/17/15 5:10 PM。我收到的字符串可以在任何时区,但我总是需要在其本地时区显示字符串,如上所示。目前,我们的代码只是将字符串传递给模板并进行转换:
<#assign mydate = obj.mydate?datetime("yyyy-MM-dd'T'HH:mm:ssz")?string.short>
这已不再适合,因为我相信Freemarker正在使用系统的本地时区,现在我们正在获得多个时区。我看到freemarker中有一个iso方法。所以我试试
<#assign order_date = order.order_date?iso("yyyy-MM-dd'T'HH:mm:ssz")>
但我一直收到错误:
For "?iso" left-hand operand: Expected a date, but this evaluated to a string
好的,我需要约会。与Joda合作,我尝试通过以下方式创建一个datetime对象:
DateTime dateTime = ISODateTimeFormat.dateTimeNoMillis().parseDateTime("2015-11-17T17:10:24-0800");
但这似乎也使用我当地的时区,并显示2015-11-17T20:10:24.000-05:00。我知道我可以使用区域(...),但我不知道除了-0800之外的区域或者在字符串末尾传递的任何区域。所以我现在无法做什么。哦,我不能改变我收到的字符串的格式。
答案 0 :(得分:4)
DateTime dateTime = ISODateTimeFormat.dateTimeNoMillis().withOffsetParsed().parseDateTime("2015-11-17T17:10:24-0800");
这将创建DateTime
,其固定时区偏移量为-08:00
。
答案 1 :(得分:0)
可能需要更多工作,但您始终可以使用DateTimeFormatterBuilder为日期时间创建自己的自定义显示。这样,如果您愿意,可以删除TimeZone并在TimeZone中进行渲染或在本地渲染。