我正在尝试格式化没有年份的日期(只有日和月,例如 12.10)
DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
对我来说仍然是年份 (12.10.20)。
所以我尝试了 DateTimeFormatter.ofPattern("dd.MM")
但显然 硬编码顺序和点,这不会让美国用户满意。(他们期望斜杠和第一个月)
如何国际化一个模式?分隔符等是否有一些抽象语法?
最佳答案
好吧,正如 Ole 所指出的,仅使用 java.time
没有 100% 令人满意的解决方案。但是我的图书馆Time4J已经找到基于CLDR仓库数据的解决方案(ICU4J也给予支持)使用类型AnnualDate (作为 MonthDay
的替代品):
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/