java.time无法解析秒的小数部分吗?
java.time无法解析秒的小数部分吗?
在Mac OS X(Mavericks)上的第一个Java 8版本(b132)中,使用新的java.time包的以下代码可以工作:
String input = "20111203123456"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss"); LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
输出结果为:
2011-12-03T12:34:56
但是,当我添加了毫秒的“SS”(并将输入设为“55”),如DateTimeFormatter类的文档所指定的,就会抛出异常:
java.time.format.DateTimeParseException: Text '2011120312345655' could not be parsed at index 0
文档中说,默认情况下使用严格模式,要求格式字符的数量与输入数字相同。所以我对这段代码为什么失败感到困惑:
String input = "2011120312345655"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSS"); LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
另一个使用文档中的示例("978")的例子也失败了:
String input = "20111203123456978"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSSS"); LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
这个例子可以工作,添加了一个小数点(但我在文档中没有找到这样的要求):
String input = "20111203123456.978"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss.SSS"); LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
输出结果为:
localDateTime: 2011-12-03T12:34:56.978
如果省略输入字符串或格式中的小数点字符,则会失败。
失败:
String input = "20111203123456.978"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSSS"); LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
失败:
String input = "20111203123456978"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss.SSS"); LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );