如何分析这种格式

问题描述:

的乔达时间我在JSON转换DateString格式YYYY-mm-DD HH:MM:SS和使用。当我转换POJO回JSON,日期是这样写2013-07-12T18:31:01.000Z代码如何分析这种格式

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

坚持到POJO。
我们如何解析时间字符串2013-07-12T18:31:01.000Z回到JodaDateTime对象。格式化程序应该是什么?
我用YYYY-mm-DD HH:MM:SS,它没有工作

+0

你为什么不使用'Date'代替格式化的日期?这将摆脱所有关于格式化的问题。您只能将日期格式化为字符串以显示给用户。处理日期时,软件不应该关心日期格式。 – m0skit0

2013-07-12T18:31:01.000Z它是标准的ISO日期时间格式。
您可以使用非标准乔达日期时间格式化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); 

你应该追加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 

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

OneLetterISO8601TimeZone手段“X”和产量登录TwoDigitHours或Z,

因此类似-05

TwoLetterISO8601TimeZone意味着 'XX' 和产量拍TwoDigitHours分钟或Z,

因此像-0500

和ThreeLetterISO8601TimeZone意味着 'XXX' 和产量登录TwoDigitHours:分

因此类似-05:00