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

时间:2019-03-23 18:10:03

标签: java date datetime parsing rfc3339

问题:

我应该解析一个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年底插入的the秒。

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

这是太平洋标准时间8的同一leap秒
  “ UTC”之后的小时数。“ 1990-12-31T15:59:60-08:00”

问题:

  • 我如何解析它以避免浪费任何时间?

更新

  • 是否存在任何适合的ZonedDateTime替代方案 RFC3339?

1 个答案:

答案 0 :(得分:2)

java.time并没有直接为您提供所需的支持。就在今天早些时候,我写了this answer,其中也有一节介绍a秒的解析。但是说的就是一切。

因此,手仍在解析。我会尝试以下方法:使用正则表达式检测秒数是否为60。如果是,则用59代替。解析。转换为UTC。如果UTC中的一天中的时间是23:59:59,则假定原始字符串中存在有效的leap秒;否则,请执行以下操作。否则,字符串不表示有效时间。

我建议在a秒的情况下,最高值为60.999999999的值有效。因此,要检测是否有60,您需要查看几分钟后冒号(如果有)之后的情况,而不是是否也有分数。