Java 17:DateTimeFormatter 未本地化 AM/PM 标记

问题描述 投票:0回答:2

我目前正在将一个软件从 Java 11 迁移到 Java 17,并注意到

DateTimeFormatter
在格式化包含 AM/PM 标记的时间时改变了其行为。早些时候,该标记已经本地化(例如,德语中的
vorm.
表示 AM),而现在,它仍然是 AM。这不是特定于语言环境的问题,因为我已经在其他语言环境中尝试过此操作。这里尝试的模式是
HH:mm:ss a
,其中
a
是标记的占位符。如何才能恢复之前的行为?

使用

DateTimeFormatter
方法调用
ofPattern
,如下所示:
ofPattern("HH:mm:ss a", Locale.GERMANY).format(now)
。 变量
now
是一个 LocalDateTime 对象。

java time localization java-17 datetimeformatter
2个回答
1
投票

我也有同样的问题。 我找到了这个: https://bugs.openjdk.org/browse/JDK-8297504

基本上,在 java 11 所基于的较旧的 unicode CLDR (v33) 中,AM/PM 的德语术语是 nachm。和沃尔姆。

但是在 java17 所基于的 CLDR v44 中,他们将其更改为 AM/PM。

screenshot of the comment

所以当前基于最新unicode的德语正确方式是AM/PM


0
投票

使用正确的

Chronology
Locale
创建正确的日期时间格式将在所需的区域设置中给出 am/pm。对于德国和中文,我能够获得正确的数据,但对于印地语和意大利,它没有给出预期的输出。可能这就是数据在各自区域的显示方式。

final String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.FULL, FormatStyle.FULL, Chronology.ofLocale(Locale.GERMAN),Locale.GERMAN);
final DateTimeFormatter targetFormat = DateTimeFormatter.ofPattern(pattern).withLocale(Locale.GERMAN);
final String value = ZonedDateTime.now().format(targetFormat);
© www.soinside.com 2019 - 2024. All rights reserved.