java - JSR310 如何将月日模式国际化?
问题描述
我试图格式化没有年份的日期(只是日期和月份,例如12.10)
DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
对我来说仍然是一年(12.10.20)。
所以我尝试DateTimeFormatter.ofPattern("dd. MM")
了,但这显然对order 和 dot 进行了硬编码,这不会让美国用户满意。(谁期望斜线和月份优先)
如何使模式国际化?分隔符等是否有一些抽象语法?
解决方案
好吧,正如 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.
推荐阅读
- .net-core - 使用事件总线的 Identity Server 4 身份验证
- ffmpeg - 如何禁用 libx264 标准错误输出?
- windbg - SOS/SOSEX 缺少源代码信息
- c# - 使用正则表达式在控制器中进行验证
- java - 在 Tomcat 等 Servlet 容器中使用 JEE 版本时如何禁用 Restlet 访问日志记录?
- laravel - 我的 laravel try-catch 语句不起作用
- java - Java 列表
来自 JPA 查询 - awk - awk - 从文件中查找数字
- bash - 将文件名添加为 .txt 文件中的列并连接到单个文件中
- javascript - 为 livereload 编译 gulpfile 时出错