我们最近从 Java 8 迁移到 11。在测试新版本时,我们发现拼写日期时(dddd、dd MMMM yyyy),生成的月份/日期是英文的。我们的默认语言环境设置为 nl_NL。恢复到 Java 8 修复了该问题,因此它与升级有关。我们尝试了很多方法:
- 在 Docker 镜像和应用程序中将默认区域设置设置为 nl_NL
- 将“java.locale.providers”设置为“COMPAT,CLDR”
- 升级库
在调试我们的接受环境时,我们注意到 DateFormatSymbols 的月/周转换错误。
编辑:
从用户创建的模板生成 Word 文档时会出现此问题。这些模板包含合并字段,这些合并字段用于创建正确的文档。正在合并字段上设置日期格式(例如 { MERGEFIELD Merge_Date @ "dddd, MMMM d, yyyy"})。用于生成这些文档的库是Aspose Word。 Aspose 库使用 DateFormatSymbols
进行转换。
我们将不胜感激,我们已经没有主意了。
最佳答案
我尝试在答案中发布 java 问题,但它得到了审核,因为它不是错误的解决方案,这是正确的。我们通过从 Docker 镜像中删除飞行记录器来解决问题。如前所述,设置该标志会导致语言提供程序在启动过程的早期加载,并且只有默认的 en_US 语言环境可用。 java bug 的链接是:
链接:Flight Recorder VM Option causes wrong initialization of Locale Providers在 JDK Bug 系统中
关于java - DateFormatSymbols 给出了错误的月/日翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69344232/