DateTimeFormatter
's API reference似乎错过了正确格式化 am-pm-of-day 的细节,我总是可以使用 String.replace()
但我觉得将选项更改为 AM 和/或下午PM 使用“aaa...”。有办法做到这一点吗?
最佳答案
根据 CLDR 本地化
在格式化日期时间对象的文本表示时,有关大小写和缩写的决定留给本地化规则处理。这些规则被定义为 Locale
的一部分目的。在基于 OpenJDK 项目代码库构建的最新版本的 Java 中,Locale
类从 Common Locale Data Repository (CLDR) 获取其本地化数据。由 Unicode 联盟维护。
所以不,没有办法指定使用“AM”还是“a.m.”除了指定一个 Locale
对象与另一个对象。
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "Asia/Tokyo" ) ) ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedTime( FormatStyle.MEDIUM ) ;
String outputCaFr = zdt.format( f.withLocale( Locale.CANADA_FRENCH ) ) ;
String outputUkEn = zdt.format( f.withLocale( Locale.UK) ) ;
如果您坚持使用特定格式,则必须自己进行字符串操作。但我建议让 Locale
、DateTimeFormatter
和 CLDR 完成本地化工作,而不是硬编码琐碎的格式调整。
请注意,CLDR 以及 Locale
和 DateTimeFormatter
类都支持亚文化。如果更高层次的文化不符合您的期望,请探索 CLDR 的定义。一种亚文化可能包含您想要的本地化规则选择。
关于java - 如何将 am-pm-of-day 格式化为 "AM/PM"而不是 "a.m./p.m."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70660150/