有没有办法创建JSR-310格式化程序,能够解析以下日期/时间与秒分数的可变长度?
2015-05-07 13:20:22.276052@H_301_3@要么
2015-05-07 13:20:22.276@H_301_3@示例代码:
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);@H_301_3@
解决方法
这解决了这个问题:
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@H_301_3@answer by JiriS是不正确的,因为它使用appendValue,而正确的方法是使用
DateTimeFormatterBuilder.appendFraction
(也处理小数点).在第二个系统中可以看出差异,appendValue
错误地解析了“2015-05-07T13:20:22.000276”.在解析时,
LocalDateTime.parse(str,formatter)
比在大多数情况下直接使用格式化器更为简单.使用builder时,利用
appendPattern()
和optionalStart()
来保持整洁.