簡體   English   中英

如何以面向未來的方式獲取 Java 中特定於區域設置的日期/時間模式

[英]How to get locale specific Date/Time patterns in Java in a future-proof way

TL;DR:我如何使用語言環境和 SHORT/MEDIUM/LONG等到模式字符串來解析日期。

完整版本:

訪問特定於語言環境的日期格式的模式似乎是 Java 中沒有很好地涵蓋的問題。

這是在

由於第一個問題的 JDK 特定性和第二個問題的實現特定性,我將這個問題帶回來,這一次是在 2017 年之后很久(日期第一個問題):

用例:

在用戶界面上,在輸入時顯示日期將被解析的日期格式:例如 For Locale.US display start date (M/d/yy) ,for Locale.GERMANY show Startdatum (dd.MM.yy) next到輸入(或者,在 HTML 中,作為占位符)。

這將是微不足道的 -只要它仍然有效- 與

DateFormat usFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
DateFormat deFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMANY);
System.out.println(((SimpleDateFormat) usFormat).toPattern()); // M/d/yy
System.out.println(((SimpleDateFormat) deFormat).toPattern()); // dd.MM.yy

但是這段代碼涉及舊的 API 和特定於實現的類型轉換 - 兩者都是我不太自信使用的假設。

維護我自己的特定於語言環境的模式庫似乎更不可取,但 DateTime API 不授予對其內部模式的任何訪問權限(它們必須在那里):

有沒有辦法以面向未來的方式解決這個問題?

由於上面的鏈接問題,這可能涉及特定的最小 Java 版本,這很好。 我目前仍然必須兼容 8 和 11,但這可以進一步推動版本,或者為在較新的 Java 版本下運行的實例提供替代的未來證明實現。

您可以使用DateTimeFormatterBuilder來獲取格式字符串:

String usFormat = DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.SHORT, null, IsoChronology.INSTANCE, Locale.US);
String deFormat = DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.SHORT, null, IsoChronology.INSTANCE, Locale.GERMANY);
System.out.println(usFormat); // M/d/yy
System.out.println(deFormat); // dd.MM.yy

暫無
暫無

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

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