簡體   English   中英

Java 8 DateTimeFormatter:與“z”和“Z”模式字母混淆

[英]Java 8 DateTimeFormatter: confusion with 'z' and 'Z ' pattern letters

我有日期字符串“2015-01-12T13:00:00.000+02:00”。 查看 JavaDoc 我看到以下內容:

 z time-zone name zone-name Pacific Standard Time; PST Z zone-offset offset-Z +0000; -0800; -08:00;


所以我懷疑要解析它,我必須使用大寫的“Z”,因為我在 +02:00 中給出了 Zone 格式:

DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000Z");

但是我得到了一個解析錯誤。

如果我使用小寫的“z”,它會起作用:

DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000z")


有誰知道發生了什么?


代碼:

DateTimeFormatter changetimeParser_Z = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000Z");
DateTimeFormatter changetimeParser_z = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000z");

String time = "2015-01-12T13:00:00.000+02:00";

ZonedDateTime time1 = ZonedDateTime.parse(time, changetimeParser_z);
System.out.println(time1);
ZonedDateTime time2 = ZonedDateTime.parse(time, changetimeParser_Z);

System.out.println(time2);


異常堆棧跟蹤:

2015-01-12T13:00+02:00
java.time.format.DateTimeParseException: Text '2015-01-12T13:00:00.000+02:00' could not be parsed at index 23
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)

我相信這是 Javadoc 中的錯誤,這部分是錯誤的

Symbol  Meaning                     Presentation      Examples<br>
------  -------                     ------------      -------
Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

因為如果你進一步閱讀,你會發現偏移量Z的解釋

Offset Z :這根據模式字母的數量格式化偏移量。 一、二或三個字母輸出小時和分鍾,不帶冒號,例如“+0130”。 當偏移量為零時,輸出將為“+0000”。 四個字母輸出局部偏移的完整形式,相當於Offset-O的四個字母。 如果偏移為零,則輸出將是相應的本地化偏移文本。 五個字母輸出小時、分鍾,如果非零,可選秒,帶冒號。 如果偏移為零,則輸出“Z”。 六個或更多字母拋出 IllegalArgumentException。

這符合RFC 822

對我來說,模式的行為應該與SimpleDateFormat相同

暫無
暫無

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

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