相关疑难解决方法(0)

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

渲染:

2011-12-03T12:34:56
Run Code Online (Sandbox Code Playgroud)

但是当我按照DateTimeFormatter类doc中的指定添加"SS"作为秒的小数(和"55"作为输入)时,会抛出异常:

java.time.format.DateTimeParseException: Text '2011120312345655' could not be parsed at index 0
Run Code Online (Sandbox Code Playgroud)

该文档说默认使用严格模式,并且需要与输入数字相同数量的格式字符.所以我很困惑为什么这段代码失败了:

String input = "2011120312345655"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
Run Code Online (Sandbox Code Playgroud)

使用文档中的示例("978")的另一个示例(失败):

String input = "20111203123456978"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
Run Code Online (Sandbox Code Playgroud)

这个例子工作,添加一个小数点(但我发现在doc中没有这样的要求):

String input = "20111203123456.978"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( …
Run Code Online (Sandbox Code Playgroud)

java java-time

35
推荐指数
1
解决办法
1万
查看次数

LocalDateTime.parse()只带有模式数字

我想从以下模式解析LocalDateTime:

yyyyMMddHHmmss000000
Run Code Online (Sandbox Code Playgroud)

这意味着通常的"yyyy ... ss"然后是六个尾随的零.

因此,格式化工作正常:

String p = "yyyyMMddHHmmss'000000'";
LocalDateTime.now().format(DateTimeFormatter.ofPattern(p));
Run Code Online (Sandbox Code Playgroud)

然后解析:

String p, v;
p = "yyyyMMddHHmmss";                                    // without '000000'
v = "20160131235930";
LocalDateTime.parse(v, DateTimeFormatter.ofPattern(p));  // it works


p = "yyyy-MMddHHmmss'000000'";                           // with '-' in between
v = "2016-0131235930000000";
LocalDateTime.parse(v, DateTimeFormatter.ofPattern(p));  // it works


p = "yyyyMMddHHmmss'000000'";                            // with '000000' but without '-'
v = "20160131235930000000";
LocalDateTime.parse(v, DateTimeFormatter.ofPattern(p));  // it throws Exception
Run Code Online (Sandbox Code Playgroud)

例外情况:

java.time.format.DateTimeParseException: Text '20160131235930000000' could not be parsed at index 0
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1947)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849)
at java.time.LocalDateTime.parse(LocalDateTime.java:492) …
Run Code Online (Sandbox Code Playgroud)

java datetime parsing java-8 java-time

6
推荐指数
1
解决办法
752
查看次数

标签 统计

java ×2

java-time ×2

datetime ×1

java-8 ×1

parsing ×1