我正在尝试格式化不带年份的日期(仅是日期和月份,例如 12.10 )
DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)对我来说仍然是年份(12.10.20)。

所以我尝试了DateTimeFormatter.ofPattern("dd. MM"),但是显然硬编码的顺序和点号,这不会使美国用户满意。 (谁期望斜杠和月份优先)

如何将图案国际化?分隔符等是否有一些抽象语法?

最佳答案

好吧,正如Ole指出的那样,仅使用java.time并没有100%令人满意的解决方案。但是我的库Time4J使用AnnualDate类型(替代MonthDay)找到了基于CLDR存储库数据的解决方案(ICU4J也提供了支持):

LocalDate yourLocalDate = ...;
MonthDay md = MonthDay.from(yourLocalDate);
AnnualDate ad = AnnualDate.from(md);

ChronoFormatter<AnnualDate> usStyle =
  ChronoFormatter.ofStyle(DisplayMode.SHORT, Locale.US, AnnualDate.chronology());
ChronoFormatter<AnnualDate> germanStyle =
  ChronoFormatter.ofStyle(DisplayMode.SHORT, Locale.GERMANY, AnnualDate.chronology());
System.out.println("US-format: " + usStyle.format(ad)); // US-format: 12/31
System.out.println("German: " + germanStyle.format(ad)); // German: 31.12.

关于java - JSR310如何国际化一个月日模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60896781/

10-10 13:31