SimpleDateFormat AM / PM转换

时间:2019-03-08 10:36:43

标签: android datetime simpledateformat

因此,我正在尝试将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

如果是,那么我该怎么做。如果没有,那怎么办?

2 个答案:

答案 0 :(得分:3)

java.time和ThreeTen Backport

    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对于 formatting 是正确的。我不知道您用来解析什么,我怀疑您的错误可能在那里。

我已经向格式化程序添加了语言环境,以控制获得的语言。由于AM和PM除了英语以外几乎没有其他语言使用,因此我选择了Locale.ENGLISH,但是请选择适合您的语言环境。

众所周知,您使用的SimpleDateFormat类很麻烦,而且幸运的是已经过时了。相反,我使用的是java.time,这是现代的Java日期和时间API。这具有额外的好处,即无需显式格式化程序就可以顺利解析24小时格式。这是因为您使用的格式符合ISO 8601(国际日期和时间标准)。现代类将默认解析(并打印)ISO 8601格式。

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

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得了ThreeTen反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接

答案 1 :(得分:0)

实际上,您可以使用两个组件来显示12小时格式:

  • K 表示“上午/下午(0-11)小时”->将显示:00:50 PM
  • h 表示“上午/下午(1-12)的小时”->将显示:12:50 PM

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