在 Java 中,Locale定义了与人们希望如何看待事物相关的事物(例如货币格式、月份名称以及一周的开始时间)。
当解析月份的名称(带有DateTimeFormatter)时,它开始变得棘手。
如果您使用Locale.US或Locale.ENGLISH则九月有缩写形式Sep。
如果您使用Locale.UK,那么 September 在 Java 11 中也有缩写形式Sep……但是当您尝试 Java 17 时,它就会有Sept(因为 Unicode CLDR 端发生了变化,我询问这是否正确)。
结果是,当我尝试使用 Java 17 进行构建时,我的测试开始失败。
我当前的代码使用Locale.UK而不是Locale.ENGLISH因为在Java中Locale.ENGLISH实际上不仅是英语,而且还是非ISO美国定义一周的方式(他们使用星期日作为一周的第一天)。我想以 ISO 方式获得它。
简单地:
WeekFields.ISO= WeekFields.of(Locale.UK)=WeekFields[MONDAY,4]WeekFields.of(Locale.ENGLISH)= WeekFields.of(Locale.US)=WeekFields[SUNDAY,1]因此,从 Java 17 开始,我还无法找到可以正常工作的内置语言环境。
在我看来,我必须选择Locale.ENGLISH并将9 月的简称更改为我需要的WeekFields。Locale.UK
我的问题是如何做到这一点(在 Java 17 中)?
或者有更好的方法来解决这个问题吗?
更新1: