如何解析这种格式的Joda时间

时间:2013-07-18 13:42:50

标签: java jackson jodatime

我在我的JSON中转换了格式YYYY-mm-DD HH:MM:SS的DateString,并使用代码持久化到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但它没有用

3 个答案:

答案 0 :(得分: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区域:

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

答案 1 :(得分:3)

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

ISO 8601时区指定为

  

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

     
 ISO8601TimeZone:
         OneLetterISO8601TimeZone
         TwoLetterISO8601TimeZone
         ThreeLetterISO8601TimeZone
 OneLetterISO8601TimeZone:
         Sign TwoDigitHours
         Z
 TwoLetterISO8601TimeZone:
         Sign TwoDigitHours Minutes
         Z
 ThreeLetterISO8601TimeZone:
         Sign TwoDigitHours : Minutes
         Z
  

答案 2 :(得分:1)

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

OneLetterISO8601TimeZone表示' X'和产量签署TwoDigitHours或Z,

因此像-05

TwoLetterISO8601TimeZone表示' XX'和产量签署TwoDigitHours分钟或Z,

因此像-0500

和ThreeLetterISO8601TimeZone表示' XXX'和产量签署TwoDigitHours:分钟

因此像-05:00

相关问题