1 回答

TA貢獻1804條經驗 獲得超2個贊
這可能會為您解決或至少是一個開始:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendPattern("XX")
.toFormatter();
String[] stringsPassed = {
"2018-11-01T16:26:15+0100",
"2018-10-31T08:27:00.0000000Z"
};
for (String sample : stringsPassed) {
OffsetDateTime odt = OffsetDateTime.parse(sample, formatter);
System.out.println(odt);
}
輸出:
2018-11-01T16:26:15+01:00
2018-10-31T08:27Z
它不會解析所有可能的 ISO 8601 字符串,但可能會解析您可以獲得的字符串。由于您只向我們展示了兩個樣本,我無法知道。
java.time 是現代 Java 日期和時間 API,對 ISO 8601 非常友好。它處理秒的存在和不存在以及秒的小數部分(最多 9 位小數)。這就是我DateTimeFormatter.ISO_LOCAL_DATE_TIME在代碼中使用的。一個小問題是內置的DateTimeFormatter.ISO_OFFSET_DATE_TIME,否則看起來就在這里,需要 UTC 偏移量中的冒號,如+01:00. 相反,我使用格式模式XX。它接受不帶冒號的偏移量,也接受Z你的第二個例子。如果還需要更多的靈活性,您可以查看格式化程序中的可選部分。檢查文檔。
喬達時間?使用 Java 8 時不推薦使用。 Joda-Time 主頁上的一些引用:
Joda-Time 是Java SE 8 之前的 Java事實標準日期和時間庫?,F在要求用戶遷移到java.time (JSR-310)。
請注意,Joda-Time 被認為是一個很大程度上“已完成”的項目。沒有計劃進行重大改進。如果使用 Java SE 8,請遷移到java.time(JSR-310)。
即使在 Java 6 和 7 上,我也會推薦 java.time 的反向移植而不是 Joda-Time。
添加回答
舉報