有没有办法创建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,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()
来保持整洁.