我同意喬C和路易斯瓦塞爾曼點評:留了早已過時的Date
類,如果有什麼辦法可以。還有。現代化的替代課程非常方便和程序員友好。
此外,您的輸入字符串符合ISO 8601標準的瞬間即時點,因此適合Instant
類。不需要任何明確的格式化器來解析它。我建議:
private static Instant parse(String inputString) {
try {
return Instant.parse(inputString);
} catch (DateTimeParseException dtpe) {
System.err.println("Parsing: " + dtpe);
return Instant.now();
}
}
使用如下的方法,例如:
String inputString = "2017-06-01T01:00:00Z";
System.out.println(parse(inputString));
此打印:
2017-06-01T01:00:00Z
嗯,這是你從開始時相同的字符串,因爲Instant.toString()
產生相同的ISO 8601字符串。
我也承認scottb:我們有時需要與傳統代碼進行互操作,而這些代碼確實需要一個陳舊的實例Date
實例。如果這是你的情況,從Date.from(parse(inputString))
產生一個。這將產生一個Date
等於瞬間(在我的電腦上打印爲Thu Jun 01 03:00:00 CEST 2017
,因爲那恰好是我的時區)。在任何情況下,我建議在輸入您的遺留代碼之前在最後一刻轉換爲Date
以最大限度地減少您對它的使用。
只是爲了實驗,讓我們嘗試用你的格式不正確的模式字符串與新DateTimeFormatter
類:
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ").parse(inputString);
這將產生java.time.format.DateTimeParseException: Text '2017-06-01T01:00:00Z' could not be parsed at index 19
。它試圖對你有所幫助:2017-06-01T01:00:00Z
的索引19是Z
。正如另外兩個答案所說,這正是格式模式與輸入不匹配的地方。相信我的話,這只是一個例子,你可以從現代課程中獲得更好的幫助,而不是從舊課程中獲得更多幫助。
我不能更強烈地建議不要使用傳統的'java.util.Date'類。您應該改用'java.time'包中的相應類。 –
您可以打印正在捕獲的異常的堆棧跟蹤,然後在此處發佈輸出? – csmckelvey
您應該考慮不推薦使用java.util.Date。整個東西。 –