芬兰日期本地化错误?
Bug in Finnish date localization?
我正在尝试使用以下代码针对芬兰进行本地化:
Locale finLocale = new Locale("fi", "FI");
Date today = new Date(2017, 1, 1);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG, finLocale);
String formattedDate = dateFormat.format(today);
System.out.println(formattedDate);
我最终得到的是"helmikuutata"。我希望 "helmikuu" 或 "helmikuuta",但这似乎是错误的。
这是有效的芬兰语,还是 Java 中存在错误?我的版本是1.8.0_31
是的,这是 JDK 中的一个错误(参见 JDK-8074791),其中在月份名称后附加了一个额外的 'ta'
。这从 JDK 8u60
版本开始得到修复。因此,如果您升级到最新的 JDK 版本,例如 JDK8u131
,您将获得正确的输出。
我确信是正确的。我已经对它投了赞成票,你应该接受它。我本来想保留以下评论,但它应该有更好的格式,所以就这样吧。
java.time
因为您正在使用 Java 8(即使您没有),您会更喜欢 java.time 的更现代的程序员友好的 API:
LocalDate today = LocalDate.of(2017, Month.FEBRUARY, 1);
DateTimeFormatter dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG)
.withLocale(finLocale);
String formattedDate = today.format(dateFormat);
在我的 Java 1.8.0_131 上它给出了预期的
1. helmikuuta 2017
如果阅读本文的人正在使用 Java 6 或 7,请考虑获取 ThreeTen Backport 库,以便您可以使用现代日期和时间 API,如图所示。
我正在尝试使用以下代码针对芬兰进行本地化:
Locale finLocale = new Locale("fi", "FI");
Date today = new Date(2017, 1, 1);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG, finLocale);
String formattedDate = dateFormat.format(today);
System.out.println(formattedDate);
我最终得到的是"helmikuutata"。我希望 "helmikuu" 或 "helmikuuta",但这似乎是错误的。
这是有效的芬兰语,还是 Java 中存在错误?我的版本是1.8.0_31
是的,这是 JDK 中的一个错误(参见 JDK-8074791),其中在月份名称后附加了一个额外的 'ta'
。这从 JDK 8u60
版本开始得到修复。因此,如果您升级到最新的 JDK 版本,例如 JDK8u131
,您将获得正确的输出。
我确信
java.time
因为您正在使用 Java 8(即使您没有),您会更喜欢 java.time 的更现代的程序员友好的 API:
LocalDate today = LocalDate.of(2017, Month.FEBRUARY, 1);
DateTimeFormatter dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG)
.withLocale(finLocale);
String formattedDate = today.format(dateFormat);
在我的 Java 1.8.0_131 上它给出了预期的
1. helmikuuta 2017
如果阅读本文的人正在使用 Java 6 或 7,请考虑获取 ThreeTen Backport 库,以便您可以使用现代日期和时间 API,如图所示。