如何将RFC 3339日期字符串解析为ZonedDateTime?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将RFC 3339日期字符串解析为ZonedDateTime?相关的知识,希望对你有一定的参考价值。
问题:
我应该解析一个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.time不提供任何你想要的直接支持。就在今天早些时候,我写了this answer,其中还有一节解析闰秒。但话说的就是有。
所以有手解析左边。我会尝试这些方法:使用正则表达式来检测秒是否为60.如果是这样:用59替换它。解析。转换为UTC。如果UTC中的时间是23:59:59,则假设原始字符串中存在有效的闰秒;否则字符串不表示有效时间。
我建议在闰秒的情况下,最高60.999999999的值是有效的。因此,为了检测是否有60,你需要在分钟后查看结肠后的内容(如果有的话),而不是依赖于是否还有分数部分。
以上是关于如何将RFC 3339日期字符串解析为ZonedDateTime?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中解析/创建格式为小数秒 UTC 时区(ISO 8601、RFC 3339)的日期时间戳?
C# 对接微信支付时生成符合 RFC3339 标准的日期时间字符串