java.text.ParseException:无法解析的日期“yyyy-MM-dd'T'HH:mm:ss.SSSZ” - SimpleDateFormat

时间:2013-11-23 22:23:49

标签: java parsing exception datetime simpledateformat

我很感激找到这个例外的bug的任何帮助:

java.text.ParseException: Unparseable date: "2007-09-25T15:40:51.0000000Z"

以下代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = sdf.parse(timeValue);
long mills = date.getTime();
this.point.time = String.valueOf(mills);

它使用Date date = sdf.parse(timeValue);抛出expcetion。

timeValue = "2007-09-25T15:40:51.0000000Z";,例外情况。

感谢。

2 个答案:

答案 0 :(得分:68)

Z表示时区字符。它需要引用:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

答案 1 :(得分:3)

Java 7中,您还可以使用X模式匹配ISO8601时区,其中包含特殊的Z(UTC)值:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSX");
Date date = sdf.parse("2007-09-25T15:40:51.0000000Z");

然而,在模式中似乎需要精确数量的毫秒字符,这对于'Z'字符模式不是必需的,并且相当不方便。我认为这是因为ISO8601定义还包括“两位数小时”,它们只是数字,因此解析器无法从前一毫秒中区分出来。

因此,这个版本适用于时间戳低至第二精度,而不是毫秒。