Joda ISODateTimeFormat在String中不使用时区

时间:2015-11-18 14:24:31

标签: java jodatime freemarker iso8601

我有两个问题,或者可能有两种不同的解决方法。我收到了像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之外的区域或者在字符串末尾传递的任何区域。所以我现在无法做什么。哦,我不能改变我收到的字符串的格式。

2 个答案:

答案 0 :(得分:4)

DateTime dateTime = ISODateTimeFormat.dateTimeNoMillis().withOffsetParsed().parseDateTime("2015-11-17T17:10:24-0800");

这将创建DateTime,其固定时区偏移量为-08:00

答案 1 :(得分:0)

可能需要更多工作,但您始终可以使用DateTimeFormatterBuilder为日期时间创建自己的自定义显示。这样,如果您愿意,可以删除TimeZone并在TimeZone中进行渲染或在本地渲染。