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类。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)