我在我的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
但它没有用
答案 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