Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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 无法将ISO-8601日期字符串解析为日期_Java_Android_Date - Fatal编程技术网

Java 无法将ISO-8601日期字符串解析为日期

Java 无法将ISO-8601日期字符串解析为日期,java,android,date,Java,Android,Date,我看了一些类似的话题,但对我没有帮助。我有ISO-8601日期类型,例如:2014-08-13T19:05:22.168083+00:00。 我尝试对其进行分析,以便: public static Date parseISO8601(final String date) { String fixedDate = date.replaceFirst("(\\d\\d[\\.,]\\d{3})\\d+", "$1"); DateFormat df = new SimpleDateFo

我看了一些类似的话题,但对我没有帮助。我有ISO-8601日期类型,例如:
2014-08-13T19:05:22.168083+00:00

我尝试对其进行分析,以便:

public static Date parseISO8601(final String date) {
    String fixedDate = date.replaceFirst("(\\d\\d[\\.,]\\d{3})\\d+", "$1");
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.ENGLISH);

    try {
        return df.parse(fixedDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    return null;
}
但它抛出了一个例外。我不明白为什么?

错误消息:
java.text.ParseException:不可解析日期:“2014-08-13T19:05:22.148+00:00”
时区使用
X
而不是
Z
,即:

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX", ...

试试时区的
X
。你知道它能在Android API 9+上工作吗?它是一个非常古老的类(这就是为什么它有一些怪癖),所以如果它不能在所有Android系统上工作,我会感到惊讶。只是我在Android的“SimpleDateFormat”文档上找不到它。它不能在旧的Android版本上工作。谢谢!我不知道“X”存在。对不起,我在旧设备(API 16)上检查了它,它不工作。旧的Android版本不知道“X”模式。唯一阻止你使用
Z
的是时区内的冒号。您可以使用另一个正则表达式删除冒号,即:
fixedDateTimezone.replaceAll(“(\\d\\d):(\\d\\d)$”,“$1$2”)
。完成此操作后,
Z
也将适用于您。注意正则表达式末尾的美元符号,它确保在几分钟或几秒钟内不会删除冒号,而是在字符串末尾(即时区)。谢谢!我用了子字符串,但我认为你的变体更好。