【问题标题】:Bug in Finnish date localization?芬兰日期本地化中的错误?
【发布时间】:2017-06-28 23:48:33
【问题描述】:

我正在尝试使用此代码为芬兰本地化:

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

【问题讨论】:

  • 我收到了1. helmikuuta 3917
  • 顺便说一句,每个人都应该避免使用过时的类DateDateFormat,更不用说不推荐使用的3-arg Date() 构造函数。当您使用 Java 8 时,没有任何借口了。 Java 8 日期和时间 API 对程序员更友好,也更易于使用,所以请帮自己一个忙。它也已向后移植到 Java 6 和 7。

标签: java localization locale date-format finnish


【解决方案1】:

是的,这是 JDK 中的一个错误(请参阅 JDK-8074791),其中额外的 'ta' 附加到月份名称。这从JDK 8u60 版本开始得到修复。因此,如果您升级到最新的 JDK 版本,例如 JDK8u131,您将获得正确的输出。

【讨论】:

    【解决方案2】:

    我确信the answer by Pallavi Sonal 是正确的。我已经投了赞成票,你可能应该接受它。我本来想保留以下评论,但它值得更好的格式,所以这里。

    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。

    【讨论】:

    • 是的,这样好多了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多