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

标签 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 = 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/

相关文章:

java - 从End到Start解析json

java - JDK 和 joda-time 日期格式化程序 : how to consider day light savings time

javascript - 在 JavaScript 中分配 Freemarker 变量

java - 添加天数后如何在 Joda-Time 中获得准确的月份差异

java - 如何对 HashMap freemarker 模板的值进行排序

java - 是否可以使用 "pre-process"Freemarker 模板?

java - Java 中的基本井字棋

java - 为什么在一个字符串字面量之后,所有的+都会被当作字符串连接运算符?

java - 如何根据Java Spring中的当前用户角色修剪Swagger文档?

java - 尝试解析 json 时出现 NoSuchFieldError "ADJUST_DATES_TO_CONTEXT_TIME_ZONE"