Java修改时间格式方法:解决am/pm与AM/PM大小写不一致问题
这个差异是区域配置和JDK版本区域数据源差异导致的:Java 9及更高版本默认使用CLDR(通用区域数据仓库)作为区域数据来源,不同系统的默认Locale、不同区域的AM/PM标识大小写习惯不同,你当前环境的默认Locale返回的是小写am/pm,而官方示例是基于英语类Locale给出的大写结果。
解决方法
方案1:创建DateTimeFormatter时显式指定英语Locale,是最稳妥的跨环境兼容方案
代码示例:DateTimeFormatter.ofPattern("ha", Locale.US);用这个格式化目标时间,固定返回
10AM方案2:对格式化结果强制转大写,适配任意Locale场景
代码示例:String formatResult = formatter.format(timeObj).toUpperCase(Locale.ROOT);指定
Locale.ROOT可以避免不同区域的大写转换规则异常方案3:修改JDK启动参数,回退到老版本兼容的区域数据源
给Java进程添加启动参数:-Djava.locale.providers=COMPAT该参数会让JDK使用旧版自带的区域数据,和Java 8及更早版本的格式化行为保持一致。
内容的提问来源于stack exchange,提问作者THM
相关产品推荐
相关产品推荐

