java – JSR-310 – 解析可变长度的秒数

前端之家收集整理的这篇文章主要介绍了java – JSR-310 – 解析可变长度的秒数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法创建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()来保持整洁.

猜你在找的Java相关文章