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

时间:2017-07-25 14:58:57

标签: java android date simpledateformat parseexception

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

if(driver.findElements(By.xpath("//section[@class='hp_news']/following::div[@class='AdUnit']")))
{
    System.out.println("div is present");
}
else
{
    System.out.println("div is not present");
}

如果是Java,我会得到预期的结果:

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();
    }
}

在android应用程序中,相同的代码也返回“hh:mm a”的异常:

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)

进口是相同的:

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

对于Java应用程序,它成功为“HH:mm”和“hh:mm a”。对于Android,它只能成功“HH:mm”。

1 个答案:

答案 0 :(得分:0)

感谢@ArnaudDenoyelle发现问题。我检查了SimpleDateFormat类,结果发现了1个值为defaul Locale的值的构造函数调用:

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

AM/PM被视为我国的错误,因为它使用24小时制。由于我的手机和简单的java应用程序返回不同的默认Locale值,我得到了不同的结果。

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

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