【发布时间】:2020-05-20 00:20:06
【问题描述】:
使用 DateTimeFormatter 将字符串 '2018-08-27T16:40:02+08:00' 转换为日期时间
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
String rawDateString = "2018-08-27T16:40:02+08:00"
DateTimeFormatter dateTimeFormatter =
DateTimeFormatter.ofPattern(DATE_TIME_FORMAT, Locale.ENGLISH);
LocalDateTime localDateTime = LocalDateTime.parse(rawDateString, dateTimeFormatter);
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
但这会返回DateTimeParseException: Text could not be parsed at index 19
我看到了类似的问题
DateTimeParseException: Text could not be parsed at index 2
但我没有看到任何带有日期时间格式的时区示例。
【问题讨论】:
-
请在这个问题下查看我的 cmets:Migrating to Java 8 DateTime [duplicate]。您不需要格式化程序。但是您确实需要解析为
OffsetDateTIme(LocalDateTime不起作用)。OffsetDateTime odt = OffsetDateTime.parse(rawDateString);。它还简化了转换:return Date.from(odt.toInstant());。在我的时区,结果是Mon Aug 27 10:40:02 CEST 2018。 -
除此之外,与您相关的答案是this one by Basil Bourque 和this one by deHaar。
-
一个细节,我从你的代码中得到的异常是 Text '2018-08-27T16:40:02+08:00' could not be parsed, unparsed text found at index 19.
-
@OleV.V.我同意这种使用 OffsetDateTIme 来简化对这种格式“2018-08-27T16:40:02+08:00”的日期与时区的解析
标签: java android java-time timezone-offset datetime-parsing