我正在尝试格式化不带年份的日期(仅是日期和月份,例如 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/