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

标签 java java-time

有没有一种方法可以创建 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/

相关文章:

java - 如何从日期格式中获得最低的计时单位?

java - SVN、Eclipse 和 Java

java - 如何在 Apache POI XWPF 中为整个 Word 文档设置字体系列

java - 为不同的时间字符串接收相同的 ZonedDateTime

java - java.time中,加一个月的结果是怎么计算的?

java - 使用时间 API 获取下个月的特定日期

java - 从ESP-32起,即使使用MulticastLock,Android也无法接收UDP广播

java - onTouch 与多点触控和 SoundPool 运动事件

java - 在改造中处理超过 1 个响应

java - 如何在 Java 8 中获取 UTC+0 日期?