SimpleDateFormat AM / PM转换

问题描述 投票:1回答:2

所以,我正在尝试将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:0012:00 am

编辑:

不应该12:10转换为12:10 PM

如果是,那我该怎么办呢。如果没有,那么最近的工作是什么?

android datetime simpledateformat
2个回答
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

请注意,您的格式模式字符串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,现代类的后端(JST 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上使用Android版的ThreeTen Backport。它被称为ThreeTenABP。并确保从org.threeten.bp导入子包的日期和时间类。

链接


0
投票

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

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

一切都按预期在这里工作。您现在必须使用最适合您的格式。

© www.soinside.com 2019 - 2024. All rights reserved.