我試圖決議這些日期java.time,然后得到一個String表示。
2021-12-27T09:15:09.738 02:00
2022-01-11T20:04:21 02:00
我閱讀了這個類似的答案,并創建了一個方法來決議上述日期并回傳String所需格式的 a:
public String getDatetimeFromDatetimeWithT(String dateFull) {
String date = "";
try {
LocalDateTime ldate = LocalDateTime.parse(dateFull, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
date = ldate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
} catch (Exception e) {
System.out.println(dateFull " not matched 1 " e);
}
try {
LocalDateTime ldate = LocalDateTime.parse(dateFull, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
date = ldate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
} catch (Exception e) {
System.out.println(dateFull " not matched 2" e);
}
return date;
}
但是,沒有匹配的模式。我在這里缺少什么?
更新:在這兩個日期我都得到了這個角色的例外。
2021-12-27T09:15:09.738 02:00 not matched 1 java.time.format.DateTimeParseException: Text '2021-12-27T09:15:09.738 02:00' could not be parsed at index 23
2022-01-11T20:04:21 02:00 not matched 2 java.time.format.DateTimeParseException: Text '2022-01-11T20:04:21 02:00' could not be parsed at index 19
uj5u.com熱心網友回復:
您甚至不需要定義模式,您的示例是 ISO 格式的,它們包含一個 offset 而不是 zone。
這就是為什么你可以使用這個替代方案(如果你想堅持LocalDateTime):
// parse without passing a formatter
OffsetDateTime odtA = OffsetDateTime.parse("2021-12-27T09:15:09.738 02:00");
OffsetDateTime odtB = OffsetDateTime.parse("2022-01-11T20:04:21 02:00");
// extract the LocalDateTimes
LocalDateTime ldtA = odtA.toLocalDateTime();
LocalDateTime ldtB = odtB.toLocalDateTime();
// print them
System.out.println(ldtA);
System.out.println(ldtB);
結果:
2021-12-27T09:15:09.738
2022-01-11T20:04:21
為了使您的方法更短,請撰寫如下內容:
public static String getDatetimeFromDatetimeWithT(String dateFull) throws DateTimeParseException {
return OffsetDateTime.parse(dateFull)
.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}
這基本上將String引數決議為僅使用 a 具有的資訊的OffsetDateTime格式。OffsetDateTimeLocalDateTime
結果與上面發布的相同......
uj5u.com熱心網友回復:
您的日期模式不正確。用這個:
yyyy-MM-dd'T'HH:mm:ss.SSSXXX
或者使用預定義的ISO標準類之一為您進行決議:
DateTimeFormatter.ISO_ZONED_DATE_TIME.parse(dateFull);
uj5u.com熱心網友回復:
LocalDateTime 不包含時區資訊。為此,您需要使用 ZonedDateTime 或 OffsetDateTime 類。您仍然可以(并且應該恕我直言)使用 DateTimeFormatter。那里有一個名為 ISO_OFFSET_DATE_TIME 的預定義格式化程式,應該可以滿足您的需求。不久前,當事先不知道格式時,我需要從字串中決議日期。所以,我寫了一篇關于我的實作想法的文章。你可以在這里閱讀
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/410999.html
標籤:
