问题:
我应该解析一个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”
问题:
更新:
答案 0 :(得分:2)
java.time并没有直接为您提供所需的支持。就在今天早些时候,我写了this answer,其中也有一节介绍a秒的解析。但是说的就是一切。
因此,手仍在解析。我会尝试以下方法:使用正则表达式检测秒数是否为60。如果是,则用59代替。解析。转换为UTC。如果UTC中的一天中的时间是23:59:59,则假定原始字符串中存在有效的leap秒;否则,请执行以下操作。否则,字符串不表示有效时间。
我建议在a秒的情况下,最高值为60.999999999的值有效。因此,要检测是否有60,您需要查看几分钟后冒号(如果有)之后的情况,而不是是否也有分数。