我有一个分为两部分的问题,或者可能有两种不同的方法来解决这个问题。我收到一个类似 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 以外的区域或在字符串末尾传递的任何区域。所以我现在不知所措。哦,我无法更改收到的字符串的格式。
最佳答案
DateTime dateTime = ISODateTimeFormat.dateTimeNoMillis().withOffsetParsed().parseDateTime("2015-11-17T17:10:24-0800");
这将创建一个 DateTime
,其时区偏移量为 -08:00
。
关于java - Joda ISODateTimeFormat 不在字符串中使用时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33782555/