SimpleDateFormat AM/PM 转换

SimpleDateFormat AM/PM conversion

所以,我正在尝试将 AM/PM 添加到 12:10:00。下面是我使用的代码

SimpleDateFormat timeToString = new SimpleDateFormat("hh:mm a");

我理解 hh 表示 12 小时,HH 表示 24 小时。

但是当我把上面提到的值放在

String dateStr = timeToString.format(time);

它给了我12:10 am

00:10:00 不应该是 12:00 am 吗?

编辑:

不应该12:10转换成12:10 PM吗?

如果是,那我该怎么做。如果不是,那么解决方法是什么?

实际上有两个组件可用于显示 12 小时格式:

  • K for "Hour in am/pm (0-11)" -> 将显示:00:50 PM
  • h for "Hour in am/pm (1-12)" -> 将显示:12:50 PM

此处一切正常。您现在必须使用最适合您的格式。

java.time 和 ThreeTen 向后移植

    DateTimeFormatter timeFormatter
            = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);

    String time24Hour = "12:10:00";
    LocalTime time = LocalTime.parse(time24Hour);
    String time12Hour = time.format(timeFormatter);
    System.out.println(time12Hour);

此代码段的输出符合您的预期:

12:10 PM

请注意,您的格式模式字符串 hh:mm a 对于 格式 是正确的。不知道你解析的是什么,我怀疑你的错误可能就在那里。

我已将区域设置添加到格式化程序以控制我获得的语言。由于 AM 和 PM 几乎不用于英语以外的其他语言,因此我选择了 Locale.ENGLISH,但请选择适合您的语言环境。

您使用的 SimpleDateFormat class 是出了名的麻烦,幸好早就过时了。相反,我使用 java.time,现代 Java 日期和时间 API。这有一个额外的好处,即无需显式格式化程序即可顺利解析 24 小时格式。这是因为您获得的格式符合国际日期和时间标准 ISO 8601。现代 classes 解析(并打印)ISO 8601 格式作为它们的默认格式。

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在新旧 Android 设备上都能很好地工作。它只需要至少 Java 6.

  • 在 Java 8 和更新的 Android 设备上(从 API 级别 26)内置了现代 API。
  • 在 Java 6 和 7 中获取 ThreeTen Backport,现代 classes 的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间 classes。

链接