【发布时间】:2021-05-18 00:03:46
【问题描述】:
LocalDateTime today = LocalDateTime.now();
String timeMedium = today.format(DateTimeFormatter
.ofLocalizedTime(FormatStyle.MEDIUM));
System.out.println("timeMedium = " + timeMedium);
在这段代码中,我们期望输出类似于timeMedium = 1:12:50 AM 的内容。它在许多具有相同 Java 版本 (16) 的 PC 中显示 AM/PM。该代码应与 java 8 及更高版本相同。但在我的电脑(MacOS Catalina)中,AM/PM 从未出现。
下面的代码也是一样的。
ZonedDateTime today = ZonedDateTime.now();
String timeMedium = today.format(DateTimeFormatter
.ofLocalizedTime(FormatStyle.LONG));
System.out.println("timeMedium = " + timeMedium);
输出将类似于timeMedium = 1:11:35 a.m. EDT。它在 Ubuntu 20.04 中运行良好。但在我的 Mac 中,它显示没有 AM/PM。
注意-我的电脑设置为 12 小时时间格式。
【问题讨论】:
-
timeMedium = 10:06:40 am出现在我的 Mac 上 -
这是真的@MadProgrammer。在其他 Mac 中,am/pm 会显示,但不是我的。我不知道为什么。
-
那么我会认为这是您的 Mac 的问题。您必须深入研究 Java 源代码,以尝试找出它从哪里提取本地化信息
-
您的系统是否配置为 24 小时制?如果是这样,则不会显示
am,因为例如下午 1:12 会显示为 13:12。 -
结果取决于 PC 的区域设置,因此您运行的区域设置与其他计算机不同。要修复,请明确指定语言环境,例如
.ofLocalizedTime(FormatStyle.LONG).withLocale(Locale.US));--- 仅供参考: Java 不使用 PC 的格式设置,仅使用区域设置。 Java 使用它自己的内部格式化规则,由该语言环境选择。 --- 或者,如果您不想修改代码,请参阅:How do I set the default locale in the JVM?
标签: java datetime-format datetimeformatter