如何根据设备区域设置使用时间缩写格式化 LocalTime?

How to format LocalTime with time-of-day abbreviation depending on device locale?

根据设备显示 LocalTime 值的最佳方式是什么?美国是唯一一个专门使用 AM/PM 时间缩写的国家,但出于某种原因,每当我的设备区域设置设置为美国时,缩写都不会出现。

美国

2:30上午/2:30下午

世界其他地方

02:30 / 14:30

当前代码

myTV.text = LocalTime.of(2, 30) + " " + LocalTime.of(14, 30)

当前结果

2:30 14:30

您需要明确设置时间格式。使用 DateTimeFormatter.ofLocalizedTime.

    DateTimeFormatter localizedTimeFormatter
            = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
    LocalTime begin = LocalTime.of(2, 30);
    LocalTime end = LocalTime.of(14, 30);

    String text = begin.format(localizedTimeFormatter) + ' ' + end.format(localizedTimeFormatter);
    System.out.println(text);

抱歉,我只能写 Java 代码。当我 运行 桌面上的代码 Java 9 将默认语言环境设置为美国时,输出为:

2:30 AM 2:30 PM

其他语言环境的输出:

  • 加拿大:2:30 AM 2:30 PM
  • 英国或 F运行ce: 02:30 14:30