2013-07-18 30 views
9

的喬達時間我在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

回答

33

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); 
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 
1

的API文檔並不完全清楚:應該讀

OneLetterISO8601TimeZone手段「X」和產量登錄TwoDigitHours或Z,

因此類似-05

TwoLetterISO8601TimeZone意味着 'XX' 和產量拍TwoDigitHours分鐘或Z,

因此像-0500

和ThreeLetterISO8601TimeZone意味着 'XXX' 和產量登錄TwoDigitHours:分

因此類似-05:00