【发布时间】:2017-10-19 00:00:31
【问题描述】:
我正在尝试将来自 Twitter API 的日期解析为来自 Java 8 的新 Instant 类。仅供参考,这是 Wed Aug 09 17:11:53 +0000 2017 的格式。
我不想处理/设置时区,因为已经在字符串中指定了一个。我只想要一个Instant 实例。
【问题讨论】:
标签: java time java-time datetime-parsing
我正在尝试将来自 Twitter API 的日期解析为来自 Java 8 的新 Instant 类。仅供参考,这是 Wed Aug 09 17:11:53 +0000 2017 的格式。
我不想处理/设置时区,因为已经在字符串中指定了一个。我只想要一个Instant 实例。
【问题讨论】:
标签: java time java-time datetime-parsing
关注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
2017-08-09T17:11:53Z
从Twitter documentation 看来,偏移量将始终为+0000。根据您对这种情况的信任程度,您可以在格式模式中使用小写x 或大写Z 而不是大写X。如果您想要更严格的验证,您还可以在转换为 Instant 之前检查 OffsetDateTime 的 .getOffset().equals(ZoneOffset.UTC) 是否为真。
【讨论】:
找到解决办法
Instant.from(DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(dateStr))
【讨论】:
Wed Aug 09 17:11:53 +0000 2017吗?
java.time.format.DateTimeParseException: Text 'Wed Aug 09 17:11:53 +0000 2017' could not be parsed at index 0。