Android 12小时时间格式出错

时间:2017-06-05 08:20:40

标签: android simpledateformat date-format

我正在使用

DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy hh:mm a");
String dateAsString = dateFormat.format(gmt);

并且获得String 06-06-2017 08:15 am.m. 为什么我会在上午或下午停止工作?

2 个答案:

答案 0 :(得分:2)

AM / PM / a.m.实际上取决于设备。在其他设备上尝试相同的代码,您可能会看到不同的结果。如果您只需要AM / PM,那么您需要通过替换点并将其转换为大写来手动完成。

答案 1 :(得分:2)

这取决于语言环境。如果你使用SimpleDateFormat(你可能不想这样做,见下文),我建议你给它一个明确的语言环境。您构建的那个使用设备的默认值,这解释了为什么您在不同设备上获得不同的结果。如果您需要,请使用new SimpleDateFormat("MM-dd-yyyy hh:mm a", Locale.getDefault()),以便读者知道您已经考虑过它。要确保获得AM和PM,请使用例如new SimpleDateFormat("MM-dd-yyyy hh:mm a", Locale.ENGLISH)

为什么不想使用SimpleDateFormat?我认为它已经过时了,因为2014年更新了Java 1.0和1.1类Java 8。它们也被ThreeTenABP向后移植到Android Java 7。得到这个并写下例如:

    LocalDateTime gmt = LocalDateTime.of(2017, Month.JUNE, 6, 8, 15);
    DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("MM-dd-uuuu hh:mm a",
                                                                   Locale.ENGLISH);
    String dateAsString = gmt.format(dateTimeFormat);

结果是

06-06-2017 08:15 AM

要明确说明时间是格林尼治标准时间,您可以使用偏移量为OffsetDateTime的{​​{1}}。

链接:How to use ThreeTenABP in Android Project