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

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

最佳答案

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


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

我向格式化程序添加了语言环境,以控制获得的语言。由于除英语外几乎没有其他语言使用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 Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
在较旧的Android上,请使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。


链接


Oracle tutorial: Date Time解释如何使用java.time。
Java Specification Request (JSR) 310,其中首先描述java.time
ThreeTen Backport projectjava.time到Java 6和7(JSR-310的ThreeTen)的反向端口。
ThreeTenABP,ThreeTen Backport的Android版
Question: How to use ThreeTenABP in Android Project,具有非常详尽的说明。
Wikipedia article: ISO 8601

07-24 09:49
查看更多