簡體   English   中英

使用 DateTimeFormatter ofPattern 解析日期

[英]Parsing a date using DateTimeFormatter ofPattern

我正在嘗試使用java.time.format.DateTimeFormatter解析包含日期和時間的字符串(我的最終目標是將此字符串中的日期轉換為java.time.LocalDate )。

嘗試解析日期時,我不斷收到 DateTimeParseExceptions。 有人可以幫忙嗎?

日期格式為“2015-07-14T11:42:12.000+01:00”。

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ");
LocalDateTime temp = LocalDateTime.ofInstant(Instant.from(f.parse(this.dateCreated)), 
                 ZoneId.systemDefault());
LocalDate localDate = temp.toLocalDate();

我嘗試了 ofPattern 的不同變體,例如嘗試通過用單引號將 T 括起來(如上所述)來逃避它,並對 . 我已經嘗試同時逃避兩者。

冒號也需要轉義嗎?

感謝您對此的任何幫助。

它應該是

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

//or

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");

代替

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ");

來自 JAVADoc:

偏移量 X 和 x:這會根據模式字母的數量來格式化偏移量。 一個字母僅輸出小時,例如“+01”,除非分鍾不為零,在這種情況下也會輸出分鍾,例如“+0130”。 兩個字母輸出小時和分鍾,不帶冒號,如'+0130'。 三個字母輸出小時和分鍾,帶有冒號,例如'+01:30'。 四個字母輸出小時和分鍾以及可選的秒,不帶冒號,例如'+013015'。 五個字母輸出小時和分鍾以及可選的秒,帶有冒號,例如'+01:30:15'。 六個或更多字母會引發 IllegalArgumentException。 當要輸出的偏移量為零時,模式字母“X”(大寫)將輸出“Z”,而模式字母“x”(小寫)將輸出“+00”、“+0000”或“+00” :00'。

“yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ”和“yyyy-MM-dd'T'HH:mm:ss.SSSVV”都可以。 請注意,5 Zs 工作,但不少於

不需要格式化模式

您的輸入字符串符合日期時間格式的 ISO 8601 標准。

java.time類在解析/生成文本時默認使用 ISO 8601 格式。 因此,您無需定義格式模式。

OffsetDateTime odt = OffsetDateTime.parse( "2015-07-14T11:42:12.000+01:00" ) ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM