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

Jac*_*cob 35 java datetime parsing exception simpledateformat

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

java.text.ParseException: Unparseable date: "2007-09-25T15:40:51.0000000Z"
Run Code Online (Sandbox Code Playgroud)

以下代码:

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);
Run Code Online (Sandbox Code Playgroud)

它抛出了暴力Date date = sdf.parse(timeValue);.

timeValue = "2007-09-25T15:40:51.0000000Z"; ,例如.

谢谢.

Rei*_*eus 72

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

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

  • 或者可能使用 X 而不是 Z 以便 Z 被接受为 ISO8601 时区,其中“Z”被解析为 UTC 时区指示符 (2认同)

DNA*_*DNA 5

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");
Run Code Online (Sandbox Code Playgroud)

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

因此,此版本适用于低至秒精度的时间戳,而不适用于毫秒。

  • @IgorGanapolsky 听起来您需要发布一个新问题,以了解您的代码和环境的完整详细信息 (2认同)