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

How can I parse RFC 3339 date string into ZondeDateTime?

问题:

我应该解析一个 RFC3339 date string. It works fine with 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

This represents the leap second inserted at the end of 1990.

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

This represents the same leap second in Pacific Standard Time, 8
hours behind UTC."1990-12-31T15:59:60-08:00"

问题:

更新:

java.time 不对您想要的内容提供任何直接支持。就在今天早些时候,我写了 ,其中也有一个关于解析闰秒的部分。不过说到做到了。

所以还有手解析。我会按照这些思路尝试一些事情:使用正则表达式来检测第二个是否为 60。如果是:用 59 替换它。解析。转换为 UTC。如果 UTC 时间是 23:59:59,假设原始字符串中有一个有效的闰秒;否则字符串不表示有效时间。

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