Android 12 小时时间格式出错

Android 12 hours Time Format getting wrong

我正在使用

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

并获取字符串 06-06-2017 08:15 a.m。 为什么我得到 a.m。设置上午或下午?

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

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

您为什么不想使用 SimpleDateFormat?我认为它早已过时,因为 Java 1.0 和 1.1 类 的更好替代品在 2014 年与 Java 8 一起出现。它们也被移植到 Android Java 7 在 ThreeTenABP。得到这个并写例如:

    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

要明确表示时间为 GMT,您可以使用带偏移量 ZoneOffset.UTCOffsetDateTime

Link: .