2015-12-17 20 views
1

我試圖創建一個對象LOCALDATE使用JodaTime庫,從輸入字符串。該字符串來自我無法控制的數據庫。出生日期輸入看起來正是這樣的:JodaTime從字符串創建與LOCALDATE模式

1963-07-19T00:00:00.000+0000 

我只想1963-07-19部分,我不想時間部分。所以,我試圖執行一個格式化像這樣:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); 

,然後創建對象LOCALDATE像這樣:

LocalDate dob = formatter.parseLocalDate(dateOfBirth); 

但我得到的錯誤:

Invalid format: "1963-07-19T00:00:00.000+0000" is malformed at "T00:00:00.000+0000" 

我也嘗試格式化器像這樣:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ"); 

但後來我得到錯誤:

Cannot parse "1963-07-19T00:00:00.000+0000": Value 0 for clockhourOfHalfday must be in the range [1,12] 

和想法如何實現我想要的?

回答

2

你的第一個例子是行不通的,因爲parseLocalDate有來匹配你的模式整個輸入字符串。

對於你的第二個例子,根據javadoc of DateTimeFormat,圖案字母h定義

h  clockhour of halfday (1~12) number  12 

它看起來像你想

H  hour of day (0~23)   number  0 
+0

完善,這個工作。我只是擔心數據庫會在以後回吐一些更奇怪的東西,並崩潰編。手指交叉。 – Richard

+0

@richard如果需要,jodatime允許您定義多個解析器。參見[這裏](http://stackoverflow.com/questions/3307330/using-joda-date-time-api-to-parse-multiple-formats)。 –

1

你已經顯示的日期是標準格式 - 的ISO8601標準。

Joda-Time有一個特殊的課程,用於爲此特定標準創建DateTimeFormatter對象 - ISODateTimeFormat類。

所以,你可以這樣做:

DateTimeFormatter formatter = ISODateTimeFormat.dateTime(); 
LocalDate dob = formatter.parseLocalDate(theDate); 

爲應付ISO-8601日期格式的不同變化等方法見documentation。對於您顯示的特定字符串,應該可以使用dateTime()方法。