11

我在我的 JSON 中转换了格式的 DateStringYYYY-mm-DD HH:MM:SS并使用代码坚持到 POJO

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
this.startDate = format.parseDateTime(startDate);

当我将 POJO 转换回 JSON 时,日期写成2013-07-12T18:31:01.000Z.
我们如何将时间字符串解析2013-07-12T18:31:01.000Z回 JodaDateTime 对象。格式化程序应该是什么。
我用过YYYY-mm-DD HH:MM:SS但没用

4

3 回答 3

34

2013-07-12T18:31:01.000Z它是标准的 ISO 日期时间格式。
您可以使用标准 Joda 日期时间格式化程序ISODateTimeFormat::dateTime()
示例:

  String startDate = "2013-07-12T18:31:01.000Z";
  DateTime dt = ISODateTimeFormat.dateTime().parseDateTime(startDate);  

在这种情况下,日期将转换为您所在时区的日期。
如果您想忽略您的时区,请UTC在格式化程序中使用 zone:

  String startDate = "2013-07-12T18:31:01.000Z";
  DateTime dt = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC).parseDateTime(startDate);
于 2013-07-19T08:27:00.087 回答
3

您应该附加X到您的模式。SimpleDateFormatAPI包含您可以在 中使用的字段的完整列表,DateFormat包括X“ISO 8601 时区”。

ISO 8601 时区指定为

模式字母的数量指定格式化和解析的格式,如下所示:

 ISO8601TimeZone:
         OneLetterISO8601TimeZone
         TwoLetterISO8601TimeZone
         ThreeLetterISO8601TimeZone
 OneLetterISO8601TimeZone:
         Sign TwoDigitHours
         Z
 TwoLetterISO8601TimeZone:
         Sign TwoDigitHours Minutes
         Z
 ThreeLetterISO8601TimeZone:
         Sign TwoDigitHours : Minutes
         Z
于 2013-07-18T13:48:37.277 回答
1

API 文档并不完全清楚:应该阅读

OneLetterISO8601TimeZone 表示“X”并产生 Sign TwoDigitHours 或 Z,

因此类似于-05

TwoLetterISO8601TimeZone 表示“XX”并产生 Sign TwoDigitHours Minutes 或 Z,

因此类似于-0500

和 ThreeLetterISO8601TimeZone 表示“XXX”并产生 Sign TwoDigitHours : Minutes

因此类似于 -05:00

于 2014-07-11T07:06:55.870 回答