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

Mic*_*ael 3 java freemarker iso8601 jodatime

我有一个由两部分组成的问题,或者可能有两种不同的方法来解决这个问题。我收到一个 ISO 字符串,如 2015-11-17T17:10:24-0800。最终目标是在某些 Freemarker 生成的 HTML 中将字符串显示为 11/17/15 5:10 PM。我收到的字符串可以位于任何时区,但我总是需要在其本地时区显示该字符串,如上所示。目前,我们的代码只是获取字符串并将其传递到模板中并进行隐藏:

<#assign mydate = obj.mydate?datetime("yyyy-MM-dd'T'HH:mm:ssz")?string.short>
Run Code Online (Sandbox Code Playgroud)

这不再是好事,因为我相信 Freemarker 正在使用系统的本地时区,而现在我们获得了多个时区。我看到freemarker中有一个iso方法。所以我尝试

<#assign order_date = order.order_date?iso("yyyy-MM-dd'T'HH:mm:ssz")>
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误:

For "?iso" left-hand operand: Expected a date, but this evaluated to a string
Run Code Online (Sandbox Code Playgroud)

好吧,我需要一个约会。与 Joda 合作,我尝试通过以下方式创建日期时间对象:

DateTime dateTime = ISODateTimeFormat.dateTimeNoMillis().parseDateTime("2015-11-17T17:10:24-0800");
Run Code Online (Sandbox Code Playgroud)

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

Rom*_*man 5

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

这将创建一个DateTime具有固定时区偏移量的-08:00.