芬兰日期本地化错误?

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,如图所示。