无法解析自定义日期格式.(JAVA)

Chr*_*fer 9 java formatting datetime parsing

我必须在Java中使用自定义日期格式.它包含微秒,尽管Java不支持微秒.因为我用零填充时间模式,格式化时工作正常,但我不能用该模式解析日期字符串.

有一个简单的解决方法或我必须自己处理微秒(使用字符串函数)?

@Test
public void testDateFormat() throws ParseException {
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS000");
    String theDate = format.format(new Date());
    // this will fail:
    format.parse(theDate);
}
Run Code Online (Sandbox Code Playgroud)

java.text.ParseException:无法解析的日期:"2010-01-25-12.40.35.769000"

jar*_*bjo 12

您的问题是,SimpleDateFormat中使用的模式具有不同的含义,具体取决于它是用作解析器还是用作格式化程序.作为格式化程序,您的模式执行预期的操作,输出将以毫秒值结束,格式为三位数后跟三个0字符,例如:

2010-01-25-14.17.47.307000

然而,用作解析器,"SSS"模式将匹配任意数量的数字,并将上述示例解析为307000 ms.在解析了ms字段之后,解析器仍将查找"000"子字符串并因异常而失败,因为您已到达输入字符串的末尾,而未满足模式的要求.

由于SimpleDateFormat中没有μs值的模式,因此在将其提供给SimpleDateFormat之前,您必须编写自己的包装器来剥离最后三个0字符的输入字符串.