SimpleDateFormat toPattern在Java 9中的行为有所不同

SimpleDateFormat toPattern在Java 9中的行为有所不同,第1张

SimpleDateFormat toPattern在Java 9中的行为有所不同
    System.setProperty("java.locale.providers", "COMPAT,CLDR");    DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, new Locale("sv", "SE"));    System.out.println(((SimpleDateFormat) dateFormat).toPattern());

在我的jdk-9.0.4上运行此打印

yyyy-MM-dd

您可能想

-D
在命令行上使用属性设置,它不会有任何区别。

在Java
9中,来自Unipre联盟的通用语言环境数据存储库(CLDR)被用作语言环境数据的默认源,而在早期的Java版本中则不是这种情况。如上所述设置系统属性将启用Java
8行为。正如nullpointer在评论中所说,您可以在此处阅读更多内容:默认情况下使用CLDR Locale
Data


罗勒·布尔克(Basil Bourque)的评论是正确的,习惯上将小写缩写用于语言,因此您可能应该指定

sv
以确保不会混淆读者。

可能还会想知道

y
模式中是否有一个或四个是否有任何区别。我阅读
SimpleDateFormat
文档的方式是,
y
将按照80-20规则来解释两位数的年份:它是在过去80年内或在接下来的20年之内。
yyyy
将两位数字的年份解释为公元一世纪的一年。
。假设您的年份在4位数范围(1000到9999)之间,那么我认为这不是问题。

如果这仅适用于瑞典语言环境,则该代码的现代版本将给出相同的结果:

DateTimeFormatterBuilder.getLocalizedDateTimePattern(        FormatStyle.SHORT, null, IsoChronology.INSTANCE, new Locale("SV", "SE")));

然而,对于一些语言环境(

en-CY
塞浦路斯例如,英语)的结果不同
DateFormat
DateTimeFormatter
,所以如果你的目标是最大的向后兼容性,坚持使用过时的
DateFormat
类。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5502096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存