[英]DateTimeFormatter.ISO_LOCAL_DATE vs DateTimeFormatter.ofPattern(“yyyy-MM-dd”) in Java 8+
[英]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.