簡體   English   中英

為什么Java9中的時區WAT無法解析日期?

[英]Why is it unparsable date with timezone WAT in Java9?

SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
df.parse("Tue Nov 09 18:04:07 WAT 2021");

錯誤

適用於 Java8。 但不是java9。 使用 JDK 9.0.4


我很高興獲得替代解決方案。 但肯定現有的應用程序只是升級到 java 9.0.4。 我想知道造成這種情況的原因以及在整個應用程序中沒有太多變化的處理方法。

在同一在線 IDE 中,代碼適用於 java 9.0.1

無處不在的中斷 - Java 10

工作場景:

爪哇 11

@Gibbs,確實,它失敗了......

我無法使用已安裝的 JDK 版本測試錯誤,但我遇到了您在屏幕截圖中顯示的在線編輯器

這不是一個完整的答案,但讓我解釋一下我的發現。

首先,問題出現在 Java 版本 10.0.1 中。 使用SimpleDateFormatDateTimeFormatter沒有區別,所以我將使用第一個。

請看錯誤截圖:

錯誤截圖

我的猜測是,該錯誤與 Java 9 中引入的關於默認使用 CLDR 語言環境數據的重要更改有關:

在 JDK 9 中,默認語言環境數據使用從 Unicode 聯盟的通用語言環境數據存儲庫 (CLDR) 派生的數據。 因此,用戶可能會看到區域敏感服務行為和/或翻譯的差異。 例如,CLDR 不為大多數 3 字母時區 ID 提供本地化顯示名稱,因此顯示名稱可能與 JDK 8 和更早版本不同。 JDK 繼續提供舊版 JRE 語言環境數據,系統屬性java.locale.providers可用於配置查找順序。 要啟用與 JDK 8 兼容的行為,可以使用以下方式設置系統屬性:

-Djava.locale.providers=COMPAT,SPI

有關更多詳細信息,請參閱JEP 252

如您所見,如果您提供java.locale.providers系統屬性的建議值,請注意代碼中的更改,一切運行順利:

成功執行

我認為該錯誤也可能與錯誤和其他錯誤有關。

所以錯誤可能與對 CLDR 的更改有關,但我錯過了它開始失敗的原因(據了解,它應該是從 Java 9 的第一個版本開始,但它似乎適用於 Java 9.0.1) ,以及為什么它在 Java 11 中也以失敗告終。

暫無
暫無

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

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