gpt4 book ai didi

java - 如何使 DateTimeFormatter 用法语输出 3 个字符月份

转载 作者:行者123 更新时间:2023-12-01 16:24:03 24 4
gpt4 key购买 nike

我正在致力于将现有系统国际化以支持法语。我希望使用 3 个字符缩写来显示月份,以便与英文版本保持一致。不幸的是,令人惊讶的是,MMM 输出了 3 和 4 个字符串的混合,均为小写并带有句号。

Locale.setDefault(Locale.FRENCH);
for (Month month : Month.values()) {
LocalDateTime date = LocalDateTime.of(2020, month, 1, 23, 59);
System.out.println(DateTimeFormatter.ofPattern("dd MMM uu").format(date));
}

输出

01 janv. 20
01 févr. 20
01 mars 20
01 avr. 20
01 mai 20
01 juin 20
01 juil. 20
01 août 20
01 sept. 20
01 oct. 20
01 nov. 20
01 déc. 20

查看 Javadoc 后发现 MMM 用英语输出 3 个字符的月份字符串是巧合而不是设计。 TextStyle.SHORT

Short text, typically an abbreviation. For example, day-of-week Monday might output "Mon".

我更喜欢使用 Java 中现有的 i18n 工具,而不必通过属性文件等引入我自己的字符串。

我所管理的最好的代码是以下有点hacky的代码。当然一定有更简单的方法吗?是否有任何 API 可以以编程方式重新定义月份,以便“MMM”按照我想要的“开箱即用”方式工作?

for (Month month : Month.values()) {
LocalDateTime date = LocalDateTime.of(2020, month, 1, 23, 59);

String original = DateTimeFormatter.ofPattern("dd 'MMM' uu").format(date);
String monthStr = DateTimeFormatter.ofPattern("MMM").format(date);
if (monthStr.length() > 3) {
monthStr = monthStr.substring(0, 3);
}
monthStr = monthStr.substring(0, 1).toUpperCase() + monthStr.substring(1);
System.out.println(original.replace("MMM", monthStr));
}

输出

01 Jan 20
01 Fév 20
01 Mar 20
01 Avr 20
01 Mai 20
01 Jui 20
01 Jui 20
01 Aoû 20
01 Sep 20
01 Oct 20
01 Nov 20
01 Déc 20

最佳答案

Java 时间 API 中使用的字符串不可配置。

我能想到的最好办法是转义 MMM,然后将其替换为英语的“开箱即用”值或法语的自定义值。

public static void main(String[] args) {
Locale.setDefault(Locale.FRANCE);
for (Month month : Month.values()) {
LocalDateTime date = LocalDateTime.of(2020, month, 1, 23, 59);
String original = DateTimeFormatter.ofPattern("dd 'MMM' uu").format(date);
System.out.println(original.replace("MMM", getMonth(date.getMonth())));
}
}

private static String getMonth(Month month) {
if (Locale.FRENCH.getLanguage().equals(Locale.getDefault().getLanguage())) {
return new String[] { "Jan", "Fév", "Mar", "Avr", "Mai", "Jun", "Jul", "Aoû", "Sep", "Oct", "Nov",
"Déc" }[month.ordinal()];
} else {
return DateTimeFormatter.ofPattern("MMM").format(month);
}
}

关于java - 如何使 DateTimeFormatter 用法语输出 3 个字符月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62191718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com