![](/img/trans.png)
[英]What is the most future-proof way to perform Java bytecode instrumentation?
[英]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.