2017-03-28 39 views
1

刪除米利斯我嘗試了不同的ISODateTimeFormatsdateHourMinuteSecond()dateTimeNoMillis())和我自己的格式"yyyy-MM-dd'T'HH:mm:ss",得到時間戳被解析到日期時間對象而不毫秒,它失敗了。無法從喬達DateTime對象

對於每種格式我試圖修改相應的字符串:

String value = "2011-01-24T09:45:00.000"; 
DateTimeFormatter formatter = ISODateTimeFormat.dateHourMinuteSecond(); 
value = value.substring(0, value.lastIndexOf('.')); 
System.out.println("Formatted dateTime: "+formatter.parseDateTime(value)); 

輸出:

Formatted dateTime: 2011-01-24T09:45:00.000Z 

回答

1

我做了我的測試中jodatime 2.2

formatter.parseDateTime(value)返回DateTime對象。當您將此對象傳遞給System.out.println時,它會調用此DateTime對象的toString()方法。並採取了看看源代碼,我發現它調用ISODateTimeFormat

// (from jodatime source) 
/** 
* Output the date time in ISO8601 format (yyyy-MM-ddTHH:mm:ss.SSSZZ). 
* 
* @return ISO8601 time formatted string. 
*/ 
@ToString 
public String toString() { 
    return ISODateTimeFormat.dateTime().print(this); 
} 

爲了得到你想要的(沒有毫秒),你需要格式化DateTime對象的輸出:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss"); 
value = value.substring(0, value.lastIndexOf('.')); 
DateTime datetime = formatter.parseDateTime(value); 

// *** create the formatter with the "no-millis" format *** 
DateTimeFormatter formatterNoMillis = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss"); 
System.out.println("Formatted dateTime: " + datetime.toString(formatterNoMillis)); 

輸出將是:

Formatted dateTime: 2011-01-24T09:45:00 

你也可以這樣做:

System.out.println("Formatted dateTime: " + formatterNoMillis.print(datetime)); 
//the output will be the same 
+0

多數民衆贊成在很有幫助,但我仍然想要沒有millis的dateTime對象,而不是沒有字符串,建議請! – yellow

+0

'DateTime'對象**總是**保存millis值。即使您解析沒有它的字符串,毫秒也會自動設置爲零。如果你想忽略millis部分,你可以實現你自己的ReadablePartial子類(你可以看看'LocalDateTime',它是一個'DateTime'沒有時區字段 - 你可以做類似的事情,但是也從中刪除millis字段)。我從來沒有做過部分課,但我就是這樣開始的。 –