如何将Twitter API日期解析为java.time.Instant?
问题描述:
我试图将来自Twitter API的日期解析为来自Java 8的新Instant
类。仅供参考,这是格式Wed Aug 09 17:11:53 +0000 2017
。如何将Twitter API日期解析为java.time.Instant?
我不想处理/设置时区,因为已经在字符串中指定了一个时区。我只想要一个Instant
实例。
答
找到了解决办法
Instant.from(DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(dateStr))
答
按照documentation of DateTimeFormatter
:
DateTimeFormatter dtf
= DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss X uuuu", Locale.ROOT);
Instant asInstant = OffsetDateTime.parse(dateStr, dtf).toInstant();
你的榜样字符串的结果是
2017-08-09T17:11:53Z
它从Twitter documentation似乎是一个Instant
将那偏移永远是+0000
。根据您信任这种情况的强烈程度,您可以使用小格式x
或大写字母Z
而不是大写字母X
。如果你想要更严格的验证,你也可以在转换为Instant
之前检查OffsetDateTime
的.getOffset().equals(ZoneOffset.UTC)
是否为真。
你确定这解析了字符串'Wed Aug 09 17:11:53 +0000 2017'? – 2017-10-19 00:28:43
我得到'java.time.format.DateTimeParseException:Text'Wed Aug 09 17:11:53 +0000 2017'无法在索引0处解析。 –