有没有一种方法可以创建 JSR-310 格式化程序,它能够解析以下日期/时间以及可变长度的秒数?
2015-05-07 13:20:22.276052
或
2015-05-07 13:20:22.276
示例代码:
DateTimeFormatter formatter
= new java.time.format.DateTimeFormatterBuilder()
.append( java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") )
.appendOptional( java.time.format.DateTimeFormatter.ofPattern(".SSSSSS") )
.toFormatter();
formatter.parse("2015-05-07 13:20:22.276052", LocalDateTime::from);
最佳答案
这样就解决了问题:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
.toFormatter();
System.out.println(LocalDateTime.parse("2015-05-07 13:20:22.276052", formatter));
System.out.println(LocalDateTime.parse("2015-05-07 13:20:22.276", formatter));
System.out.println(LocalDateTime.parse("2015-05-07 13:20:22", formatter));
// output
2015-05-07T13:20:22.276052
2015-05-07T13:20:22.276
2015-05-07T13:20:22
answer by JiriS不正确,因为它使用 appendValue
而正确的方法是使用 DateTimeFormatterBuilder.appendFraction
(它也处理小数点)。可以在第二个系统中看到差异,其中 appendValue
错误地解析“2015-05-07T13:20:22.000276”。
解析时,LocalDateTime.parse(str, formatter)
在大多数情况下,它比直接使用格式化程序更简洁。
使用 builder 时,利用 appendPattern()
和 optionalStart()
保持整洁。
关于java - JSR-310 - 解析可变长度的秒分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30103167/