Joda ISODateTimeFormat 不在字符串中使用时区

Joda ISODateTimeFormat not using timezone in String

我有一个两部分的问题,或者可能有两种不同的方法来解决这个问题。我收到一个类似 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 = ISODateTimeFormat.dateTimeNoMillis().parseDateTime("2015-11-17T17:10:24-0800");

但这似乎也使用我当地的时区并显示 2015-11-17T20:10:24.000-05:00。我知道我可以使用 Zone(...) 但我不知道除了 -0800 以外的区域或在字符串末尾传递的任何区域。所以我现在不知所措。哦,我无法更改收到的字符串的格式。

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

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

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