【问题标题】:Android: Parsing datetime with timezone using DateTimeFormatter [duplicate]Android:使用 DateTimeFormatter 解析带有时区的日期时间 [重复]
【发布时间】: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]。您不需要格式化程序。但是您确实需要解析为OffsetDateTImeLocalDateTime 不起作用)。 OffsetDateTime odt = OffsetDateTime.parse(rawDateString);。它还简化了转换:return Date.from(odt.toInstant());。在我的时区,结果是Mon Aug 27 10:40:02 CEST 2018
  • 除此之外,与您相关的答案是this one by Basil Bourquethis 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


【解决方案1】:

您还需要在格式中指定时区偏移量。像这样:

 String DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssXXX";

请看下面的链接: https://www.journaldev.com/17899/java-simpledateformat-java-date-format

【讨论】:

  • 感谢您的贡献。这不是错误的,但是(1)OP 根本不需要格式化程序,所以我们不需要修复那部分。 (2) 链接无关紧要,因为 OP 明智地使用 java.time,现代 Java 日期和时间 API,而不是旧的和麻烦的 SimpleDateFormat
猜你喜欢
  • 2011-09-28
  • 2016-06-08
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
相关资源
最近更新 更多