首先,該值是LocalDateTime
,不一個LocalDate
。如果你想最終得到一個日期,我會先將它轉換爲LocalDateTime
,然後取日期部分。
執行日期格式化和解析時,請務必仔細閱讀文檔。它看起來像你使用喬達時間(由於使用forPattern
;如果你可以移動到Java 8將是有益的)。這意味着你應該閱讀DateTimeFormat
docs。
目前存在的問題與你的模式:
- 你使用 'd' 而不是 'd';這意味着一年中某一天的
- 你指定的「T」沒有引用它,它是不是在圖案反正
- 你已經忽略你的價值
- 的幾分之第二部分當值中沒有時區指示符時,您已指定'zz'。
這裏有一個工作示例:
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, format);
System.out.println(localDateTime);
}
}
如果實際上想在中間與T
解析值,你會使用的"yyyy-MM-dd'T'HH:mm:ss.S"
模式 - 注意T
如何再引述如此它的字面處理而不是格式說明符。
請注意,這是只是解析。它不是「將字符串轉換爲ISO日期格式」 - 它將字符串轉換爲LocalDateTime
。如果您想以格式以ISO格式表示值,則需要使用DateTimeFormatter.print
,並使用適當的格式。例如,您可能要轉換成的yyyy-MM-dd'T'HH:mm:ss.S
「的格式:
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, parser);
DateTimeFormatter printer = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.S");
String formatted = printer.print(localDateTime);
System.out.println(formatted); // Output 2016-07-05T02:14:35.0
}
}
上面的代碼將只處理一個單一的數字幾分之一秒。你可以使用.SSS
而不是.S
進行解析,但是你真的需要確定你想在不同的情況下輸出什麼(例如100毫秒,你想要.1還是.100?)。
參見:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT。如果這樣做不能幫助你改變模式到'YYYY-MM-DD'THH:mm:sszzz' – shachar
想問一個問題嗎? ''2016-07-05 02:14:35.0「.replace(」「,」T「)' –