我很感激找到这个例外的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";
,例外情况。
感谢。
答案 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定义还包括“两位数小时”,它们只是数字,因此解析器无法从前一毫秒中区分出来。
因此,这个版本适用于时间戳低至第二精度,而不是毫秒。