簡體   English   中英

使用 DateTimeFormatter 時出現“z”(時區名稱)上的 DateTimeParseException

[英]DateTimeParseException on 'z' (time-zone name) when using DateTimeFormatter

使用 OpenJDK 11.0.3,當我想用時區格式化日期時,我收到以下錯誤:

String pattern = "EEE MMM dd HH:mm:ss z yyyy";
String dateStr = "Thu Jan 01 01:00:00 CET 1970";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH);

LocalDate date = LocalDate.parse(dateStr, formatter);
java.time.format.DateTimeParseException: Text 'Thu Jan 01 01:00:00 CET 1970' could not be parsed: null
    at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:2017)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1952)
    at java.base/java.time.LocalDate.parse(LocalDate.java:428)
...
Caused by: java.lang.NullPointerException
    at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.prefixLength(DateTimeFormatterBuilder.java:4527)
    at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.add0(DateTimeFormatterBuilder.java:4396)
    at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.add(DateTimeFormatterBuilder.java:4391)
...

當我省略時區名稱( z )時,一切正常:

String pattern = "EEE MMM dd HH:mm:ss yyyy";
String dateStr = "Thu Jan 01 01:00:00 1970";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH);

LocalDate date = LocalDate.parse(dateStr, formatter);
date ==> 1970-01-01

這個版本好像有bug。

使用 OpenJDK 11.0.11 版時,一切正常:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
   "EEE MMM dd HH:mm:ss z yyyy", 
   Locale.ENGLISH
);
LocalDate date = LocalDate.parse("Thu Jan 01 01:00:00 CET 1970", formatter);
date ==> 1970-01-01

不幸的是,我在互聯網上找不到與此問題相關的任何內容,因此我無法真正說明為什么在舊版本中會發生這種情況。

暫無
暫無

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

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