如何将RFC 3339日期字符串解析为ZonedDateTime?

问题描述 投票:1回答:1

问题:

我应该解析一个RFC3339日期字符串。它适用于ISO_ZONED_DATE_TIME

ZonedDateTime.parse("1985-04-12T23:20:50.52Z", ISO_ZONED_DATE_TIME);
ZonedDateTime.parse("1996-12-19T16:39:57-08:00", ISO_ZONED_DATE_TIME);

假设我将解决一个未知的本地抵消公约问题,只是为了不接受这些日期。但我仍然遇到一些像这样的角落问题:

  1990-12-31T23:59:60Z

这代表了1990年底插入的闰秒。

  1990-12-31T15:59:60-08:00

这代表了太平洋标准时间8的相同闰秒 小于UTC的时间。“1990-12-31T15:59:60-08:00”

题:

  • 如何解析它,避免丢失任何秒数?

更新:

  • 是否存在适合RFC3339的ZonedDateTime的替代方案?
java date datetime parsing rfc3339
1个回答
2
投票

java.time不提供任何你想要的直接支持。就在今天早些时候,我写了this answer,其中还有一节解析闰秒。但话说的就是有。

所以有手解析左边。我会尝试这些方法:使用正则表达式来检测秒是否为60.如果是这样:用59替换它。解析。转换为UTC。如果UTC中的时间是23:59:59,则假设原始字符串中存在有效的闰秒;否则字符串不表示有效时间。

我建议在闰秒的情况下,最高60.999999999的值是有效的。因此,为了检测是否有60,你需要在分钟后查看结肠后的内容(如果有的话),而不是依赖于是否还有分数部分。

© www.soinside.com 2019 - 2024. All rights reserved.