java.time无法解析秒的小数部分吗?

18 浏览
0 Comments

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 );

0