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);

假设我将解决 Unknown Local Offset Convention 的问题,只是为了不接受这些日期。但是我仍然对一些像这样的极端情况有疑问:

  1990-12-31T23:59:60Z

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

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

这代表太平洋标准时间的相同闰秒,
比 UTC 晚 8 小时。"1990-12-31T15:59:60-08:00"

问题:

  • 我怎样才能解析它避免失去任何秒?

更新:

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

1 回答 1

2

java.time 不为您想要的内容提供任何直接支持。就在今天早些时候,我写了这个答案,其中还有一个关于解析闰秒的部分。但所说的就是一切。

所以剩下的就是手动解析。我会尝试以下方法:使用正则表达式检测第二个是否为 60。如果是:将其替换为 59。解析。转换为 UTC。如果 UTC 时间是 23:59:59,则假设原始字符串中存在有效的闰秒;否则字符串不表示有效时间。

我建议在闰秒的情况下,最高 60.999999999 的值是有效的。因此,要检测是否有 60,您需要查看分钟后冒号(如果有)之后的内容,而不是取决于是否也有小数部分。

于 2019-03-23T18:21:08.113 回答