我正在為此苦苦掙扎..我有一個輸入字串 - 像這樣:2021-10-13 11:33:16.000-04
使用 Java。
我需要從中獲取一個 Date 物件。我可以使用哪種格式模式?
我試著用這些
SimpleDateFormat inFormatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS'-'ZZ");
和
SimpleDateFormat inFormatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSSZZ");
我不斷得到
java.text.ParseException: Unparseable date: "2021-10-13 11:33:16.000-04"
at java.base/java.text.DateFormat.parse(DateFormat.java:396)
at com.dima.tests.DatesConversions.main(DatesConversions.java:24)
請幫忙 !!
uj5u.com熱心網友回復:
不要使用 Date,因為它已經過時了。使用java.time 中的類
OffsetDateTime odt = OffsetDateTime.parse(str,
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSX"));
System.out.println(odt);
印刷
2021-10-13T11:33:16-04:00
uj5u.com熱心網友回復:
時間
即使您需要將老式Date物件提供給您無法控制的遺留 API,我仍然建議您在自己的代碼中使用 java.time,現代 Java 日期和時間 API。最終轉換Date為非常簡單。
我會使用這個格式化程式來最大限度地重用現有的格式化程式:
private static final DateTimeFormatter PARSER = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE)
.appendLiteral(' ')
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.appendOffset(" HHmm", " 00")
.toFormatter(Locale.ROOT);
然后我們像這樣決議和轉換:
String input = "2021-10-13 11:33:16.000-04";
OffsetDateTime dateTime = OffsetDateTime.parse(input, PARSER);
System.out.println(dateTime);
Instant i = dateTime.toInstant();
Date oldfashionedDate = Date.from(i);
System.out.println(oldfashionedDate);
輸出在我的時區,歐洲/哥本哈根:
2021-10-13T11:33:16-04:00 Wed Oct 13 17:33:16 CEST 2021
丹麥在一年中的這個時候偏移 02:00,因此比您的字串的 UTC 偏移 -04 提前 6 小時。因此會Date.toString()混淆地列印比一天中的原始時間提前 6 小時的時鐘小時。
注意:如果您的轉發服務接受老式 以外的任何內容Date,則不應使用該類。例如,如果 aString是必需的OffsetDateTime,我們可以使用第二個DateTimeFormatter(或者在幸運的情況下,它的toString方法)將我們得到的 格式化為一個新字串。
你的代碼出了什么問題?
首先,UTC 偏移量可以有正號或負號。而不是-04你可以有例如 09。格式化程式旨在將符號 或-,作為偏移量的一部分。因此,在您的第一次嘗試中,將減號硬編碼為文字肯定會失敗。在您的第二次嘗試中yyyy-MM-dd HH:mm:ss.SSSZZ,您已經離得更近了。但是,ZZ對于帶有符號和四位數字的偏移量(例如 0530或-0400; 小時和分鐘),因此不適用于像-04. 您SimpleDateFormat期望字串結尾處有更多數字,因此拋出了您看到的例外。
關聯
Oracle 教程:解釋如何使用 java.time 的日期時間。
uj5u.com熱心網友回復:
由于您使用ISO 8601 time zone時區,因此您可以使用以下模式。
SimpleDateFormat inFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSX");
然后,要獲取日期:
Date date = inFormatter.parse("2021-10-13 11:33:16.000-04");
始終檢查檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321373.html
上一篇:如何從發布時間過濾特定時間的帖子
下一篇:替換日期時間物件上的分鐘
