java.text.ParseException:"hh:mm a" 无法解析的日期

java.text.ParseException: Unparseable date for "hh:mm a"

我正在努力将 "hh:mm a" 中的日期转换为 android 中的 "HH:mm"。虽然我在简单的 java 应用程序上没有收到任何错误,但在 android 上收到错误。这是代码:

String time = "02:00 PM";
String formattedTime = "";
SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm");
String parseFormats[] = new String[]{"HH:mm", "HHmm", "hh:mm a", "hh a"};

for (String parseFormat : parseFormats) {
    SimpleDateFormat formatting = new SimpleDateFormat(parseFormat);
    try {
        Date date = formatting.parse(time);
        formattedTime = displayFormat.format(date);
        System.out.println(formattedTime);
    } catch (ParseException e) {
        System.out.println(parseFormat);
        e.printStackTrace();
    }
}

在 Java 的情况下,我得到了预期的结果:

02:00
HHmm
java.text.ParseException: Unparseable date: "02:00 PM"
    at java.text.DateFormat.parse(DateFormat.java:366)
    at HelloWorld.main(HelloWorld.java:31)
14:00
hh a
java.text.ParseException: Unparseable date: "02:00 PM"
    at java.text.DateFormat.parse(DateFormat.java:366)
    at HelloWorld.main(HelloWorld.java:31)

在 android 中应用相同的代码 returns "hh:mm a" 也有异常:

I/System.out: hh:mm a
W/System.err: java.text.ParseException: Unparseable date: "02:00 PM"

导入相同:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

在 Java 应用的情况下,"HH:mm" 和 "hh:mm a" 成功。在 Android 的情况下,它仅在 "HH:mm".

时成功

感谢@ArnaudDenoyelle 找到了问题。我检查了 SimpleDateFormat class,结果是 1 个有值的构造函数调用 2 个有默认 Locale 的值:

public SimpleDateFormat(String pattern)
    {
        this(pattern, Locale.getDefault(Locale.Category.FORMAT));
    }

AM/PM 在我国被视为错误,因为它使用 24 小时制。由于我的 phone 和简单的 java 应用程序 return 不同的默认区域设置值,我得到了不同的结果。

虽然这不是解决方案,但我使用 Locale.France 来避免问题:

SimpleDateFormat formatting = new SimpleDateFormat(parseFormat, Locale.FRANCE);