加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:04:26 所属栏目:Java 来源:网络整理
导读:有没有办法创建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.fo
有没有办法创建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()来保持整洁.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读