java.text.ParseException:Unparseable date:yyyy-MM-dd HH:mm:ss.SSSSSS

Pra*_*eth 6 java simpledateformat parseexception

我正在获取ParseException以下代码

    String dateStr = "2011-12-22 10:56:24.389362";
    String formatStr = "yyyy-MM-dd HH:mm:ss.SSSSSS";
    Date testDate = null;
    SimpleDateFormat sdf= new SimpleDateFormat(formatStr);
    sdf.setLenient(false);
    testDate = sdf.parse(dateStr);

    System.out.println("CHECK DATE " + sdf.format(testDate));
Run Code Online (Sandbox Code Playgroud)

Exception in thread "main" java.text.ParseException: Unparseable date: "2011-12-22 10:56:24.389362" at java.text.DateFormat.parse(DateFormat.java:337)

如果我注释掉该行sdf.setLenient(false),那么我会看到输出的时间差 CHECK DATE 2011-12-22 11:02:53.000362

我究竟做错了什么??

Ski*_*ead 7

'S'是毫秒.一秒钟内有1000(0到999)毫秒.389362大于999.额外的389000毫秒转换为389秒,或6分29秒并添加到时间.


cHa*_*Hao 5

S格式说明指的是毫秒。当您允许宽松解析时,最后一部分被解释为 389362 毫秒。到目前为止,当将其添加到日期时,最后 3 位数字(实际上,值 % 1000)成为实际的毫秒数,并且您最终得到的日期比您预期的晚了大约 389 秒(约 6 1/2 分钟) . (通过严格解析,解析器知道 389362 毫秒没有意义,因此会引发错误。)

解决这个问题的最简单方法,如果你能保证日期总是这样,那就是去掉最后 3 位数字。(这将在大约一半的时间内为您提供一个相差一毫秒的日期。但这比必须编写日期解析器要好......)