【问题标题】:AM/PM not showing on LocalDateTime/ZonedDateTime上午/下午未显示在 LocalDateTime/ZonedDateTime
【发布时间】: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


【解决方案1】:

语言环境

这是使用所需语言环境的问题。 Java 不会采用底层操作系统(在您的情况下为 macOS)的 12 小时或 24 小时设置。它经常选择操作系统的语言环境,但不能保证总是这样做。因此,防弹解决方案是在 Java 代码中指定语言环境。例如孟加拉语语言环境:

    ZonedDateTime today = ZonedDateTime.now(ZoneId.of("Asia/Dhaka"));
    DateTimeFormatter timeFormatter
            = DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG)
                    .withLocale(Locale.forLanguageTag("bn-BD"));
    String timeLong = today.format(timeFormatter);
    System.out.println("timeLong = " + timeLong);

示例输出:

timeLong = 上午 9:11:57 BDT

链接(感谢安德烈亚斯):How do I set the default locale in the JVM?

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多