Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.text.ParseException:不可解析的日期;hh:mma";_Java_Android_Date_Simpledateformat_Parseexception - Fatal编程技术网

java.text.ParseException:不可解析的日期;hh:mma";

java.text.ParseException:不可解析的日期;hh:mma";,java,android,date,simpledateformat,parseexception,Java,Android,Date,Simpledateformat,Parseexception,我正在努力将android中的日期从“hh:mm a”转换为“hh:mm”。虽然我在简单java应用程序上没有得到任何错误,但在android上得到了一个错误。代码如下: String time = "02:00 PM"; String formattedTime = ""; SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm"); String parseFormats[] = new String[]{"HH:mm", "

我正在努力将android中的日期从“hh:mm a”转换为“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应用程序中,同样的代码也会为“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”成功。在安卓系统中,它只在“HH:mm”时成功。

由于@ArnaudDenoyelle发现了问题。我检查了SimpleDataFormat类,结果发现1值构造函数调用了2值的defaul语言环境:

public SimpleDateFormat(String pattern)
    {
        this(pattern, Locale.getDefault(Locale.Category.FORMAT));
    }
AM/PM
对于我的国家来说是一个错误,因为它使用24小时制。当我的手机和简单java应用程序返回不同的默认语言环境值时,我得到了不同的结果

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

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

根据代码,它在第一次解析数组元素时失败。它假设u以hh:mm格式传递日期,但实际日期是以hh:mm格式传递的。好吧,第一次失败,然后继续到第二次。关键是:它也不能用于“hh:mma”。我将更新问题,使其更加具体,因为它可能与默认语言环境有关<对于使用24小时制的国家/地区,代码>上午/下午可能被视为错误。当您实例化
日期格式时,是否可以尝试在某个地方提供区域设置?它适用于中的“h:mm a”android@ArnaudDenoyelle是的,这就是问题所在。我加上了语言环境。法国,它成功了。但是,在默认或Locale.dermany中,它不起作用,因为AM和PM几乎不用于英语以外的其他语言,我建议使用
Locale.English