因此,我正在尝试将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 project,
java.time
到Java 6和7(JSR-310的ThreeTen)的反向端口。ThreeTenABP,ThreeTen Backport的Android版
Question: How to use ThreeTenABP in Android Project,具有非常详尽的说明。
Wikipedia article: ISO 8601