在Java中更改`DateTimeFormatter`模式> 8

Rém*_*i.B 6 java datetime-format java-time

运行:

Locale locale = Locale.US;
String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
        FormatStyle.LONG, 
        FormatStyle.LONG,
        Chronology.ofLocale(locale), 
        locale);
System.out.println("pattern: " + pattern);
Run Code Online (Sandbox Code Playgroud)

输出:

pattern: MMMM d, yyyy h:mm:ss a z   // Java  8.0.171-oracle
pattern: MMMM d, y 'at' h:mm:ss a z // Java 11.0.0-open
Run Code Online (Sandbox Code Playgroud)

我发现Oracle使用iana-tz数据库(https://data.iana.org/time-zones/tz-link.html)来管理时区数据(请参阅https://www.oracle.com/technetwork/java /javase/tzdata-versions-138805.html).

但是,我没有发现任何关于标准日期格式的更改.调查源代码,似乎在Java 8中,该函数LocaleResources.getJavaTimeFormatData()加载了sun.text.resourcesbundle,而在Java 11中,它加载了sun.text.resources.cdlrbundle.

我的问题是:这样的变化是否记录在某个地方,可能是有原因的?

此外,确保与现有数据库兼容的最佳方法是什么?现在,我们有一个已识别模式的列表,所以我正在考虑通过解析新模式将旧模式添加到我的可识别模式列表中.

另一个值得注意的变化是:

Locale locale = Locale.US;
String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
        FormatStyle.SHORT, FormatStyle.MEDIUM, Chronology.ofLocale(locale), locale);
System.out.println("pattern: " + pattern);
Run Code Online (Sandbox Code Playgroud)

输出:

pattern: M/d/yy h:mm:ss a  // Java  8.0.171-oracle
pattern: M/d/yy, h:mm:ss a // Java 11.0.0-open
Run Code Online (Sandbox Code Playgroud)