【问题标题】:Java 8 DateTimeFormatter to ignore millisecond and zoneJava 8 DateTimeFormatter 忽略毫秒和区域
【发布时间】:2018-07-26 20:49:01
【问题描述】:

我正在努力使用 Java 8 DateTimeFormatter

我想将给定的String 转换为 dateFormat 并解析为LocalDateTime

这是我的代码

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")
String text = "2020-01-01T01:01:11.123Z"
LocalDateTime date = LocalDateTime.parse(text, f)

但是 Java 抛出

无法解析文本,在索引 19 处找到未解析的文本

如果我将ofPattern 更改为yyyy-MM-dd'T'HH:mm:ss.SSSX,我的代码执行时不会出现任何错误。 但我不想使用毫秒和时区。

【问题讨论】:

    标签: java datetime datetime-format java-time datetime-parsing


    【解决方案1】:

    改为这样做:

    String text = "2020-01-01T01:01:11.123Z";
    LocalDateTime date = ZonedDateTime.parse(text)
                                      .toLocalDateTime();
    

    要摆脱毫秒信息,请执行以下操作:

    LocalDateTime date = ZonedDateTime.parse(text)
                                      .truncatedTo(ChronoUnit.SECONDS)
                                      .toLocalDateTime();
    

    您也可以使用OffsetDateTime 代替ZonedDateTime

    【讨论】:

    • 好答案。我推荐OffsetDateTime,因为我们有一个偏移量(Z)并且没有时区(时区是地球上的一个地方,所有历史和已知的未来对UTC 偏移量的变化都在那个地方)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多