3 回答

TA貢獻1757條經驗 獲得超8個贊
格式的時區部分需要一個前導 + 或 - 字符。因此,您提供的字符串失敗了。如果您嘗試使用“20190911T14:37:08.777 + 0400”,它會起作用。
我沒有看到任何可與沒有符號的 4 位時區偏移一起使用的選項。?

TA貢獻1842條經驗 獲得超21個贊
使用正確的格式代碼。
輸入意味著微秒范圍內的小數秒?
如果最后的數字代表秒的一小部分,則此代碼有效。用七位數字來表示秒的小數部分是不尋常的;3(3、6 或 9)的增量更為常見。但我們可以讓它發揮作用。
String input = "20190911T14:37:08.7770400" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuMMdd'T'HH:mm:ss.SSSSSSS" ) ;?
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
ldt.toString(): 2019-09-11T14:37:08.777040
輸入意味著偏移?輸入錯誤。
如果最后的數字是以毫秒為單位的小數秒和與 UTC 的偏移量(小時數和分鐘數)的四位數字的組合,那么您的輸入就有錯誤。偏移量要么早于 UTC,要么晚于 UTC。因此偏移量必須包含加號+
或減號-
。您的輸入兩者都沒有,因此無法解析此類字符串的相對 UTC 偏移量。
ISO 8601
輸入字符串的格式很糟糕,顯然是對標準ISO 8601格式的笨拙修改。例如:2013-04-03T17:04:39.9437823+04:00
.?我強烈建議您對這些數據的發布者進行有關 ISO 8601 標準的教育。不要發明新格式,堅持標準。
java.time類在解析/生成字符串時默認使用ISO 8601格式。因此,根本不需要指定格式模式!
另一件事:如果您嘗試跟蹤時間軸上的時刻、實際點,那么您必須在輸入中包含偏移量或時區。如果沒有這種背景,我們不知道輸入是否意味著日本東京的下午 2 點或美國俄亥俄州托萊多的下午 2 點——兩個截然不同的時刻,相隔幾個小時。

TA貢獻1871條經驗 獲得超8個贊
String dateFormatter ="20190911T14:37:08.777+0400";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss.SSSZZZZ");
try {
System.out.println(sdf.parse(dateFormatter));
} catch (Exception ex) {
System.out.println(ex);
}
添加 + 應該可以,并檢查它是“yyyyMMdd”而不是“YYYYMMDD”。
添加回答
舉報