如何将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)) 
+1

你确定这解析了字符串'Wed Aug 09 17:11:53 +0000 2017'? – 2017-10-19 00:28:43

+0

我得到'java.time.format.DateTimeParseException:Text'Wed Aug 09 17:11:53 +0000 2017'无法在索引0处解析。 –

按照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)是否为真。