如何将 Twitter API 日期解析为 java.time.Instant?

How can I parse Twitter API dates into java.time.Instant?

我正在尝试将来自 Twitter API 的日期解析为来自 Java 的新 Instant class 8. 仅供参考,这是格式 Wed Aug 09 17:11:53 +0000 2017.

我不想处理/设置时区,因为字符串中已经指定了一个时区。我只想要一个 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();

对于您的示例字符串,结果是 Instant of

2017-08-09T17:11:53Z

Twitter documentation 看来偏移量总是 +0000。根据您对这种情况的信任程度,您可以在格式模式中使用小 x 或大写 Z 而不是大写 X。如果您想要更严格的验证,您还可以在转换为 Instant.

之前检查 OffsetDateTime.getOffset().equals(ZoneOffset.UTC) 是否为真