java - 如何将 am-pm-of-day 格式化为 "AM/PM"而不是 "a.m./p.m."?

标签 java java-8 java-time

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) ) ;

如果您坚持使用特定格式,则必须自己进行字符串操作。但我建议让 LocaleDateTimeFormatter 和 CLDR 完成本地化工作,而不是硬编码琐碎的格式调整。

请注意,CLDR 以及 LocaleDateTimeFormatter 类都支持亚文化。如果更高层次的文化不符合您的期望,请探索 CLDR 的定义。一种亚文化可能包含您想要的本地化规则选择。

关于java - 如何将 am-pm-of-day 格式化为 "AM/PM"而不是 "a.m./p.m."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70660150/

相关文章:

java - 如何从内部识别 Java Web 应用程序的 URL?

java - 是否值得将 <br/> 更改为 <br> 以迁移到 Java 8?

java - 如何使用 objectMapper 设置 java.time.Instant 的字符串格式?

json - 无法从 String 反序列化 java.time.LocalDate 类型的值

java - 查询从 Access 中的多个表中删除

java - 在java8中,添加了哪个类来替换 `sun.beans.editors.StringEditor`

java - 包裹、类加载器和读取空值

Java泛型接口(interface)实现不能省略类型参数?

Java 8 收集对象中已经存在的列表

java - 即时到 Unix 时间戳