【问题标题】:SimpleDateFormat for 2018-05-19T04:51:29.6702751+00:00 [duplicate]2018-05-19T04:51:29.6702751+00:00 的 SimpleDateFormat [重复]
【发布时间】:2018-05-22 01:32:00
【问题描述】:

来自服务器的日期为2018-05-19T04:51:29.6702751+00:00。 我需要在 Android 中将这个字符串转换为 Date object

“+”号后面的部分不知道怎么处理

【问题讨论】:

  • 要删除+号后的数据还是什么,转换成DAte对象
  • 将 + 号后的文本剪掉并转换为 Date 对象
  • 我想使用该数据。它给出了 GMT 时区,这将影响当前时区(用户所在的位置)中的结果日期
  • 顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。

标签: java android simpledateformat


【解决方案1】:

如果您使用的是 Java-8,则可以使用 ZonedDateTime 类解析字符串,例如:

    ZonedDateTime d = ZonedDateTime.parse("2018-05-19T04:51:29.6702751+00:00");
    Date date = Date.from(d.toInstant());
    System.out.println(date.toString());

对于 Java-7,您可以这样做:

    SimpleDateFormat formatwithzone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXX");
    Date date1 = formatwithzone.parse("2018-05-19T04:51:29.6702751+05:30");
    System.out.println(date1.toString());

【讨论】:

  • 正确答案。可以使用OffsetDateTime。除非某些遗留 API 需要 Date 对象,否则人们更愿意使用 ZonedDateTimeOffsetDateTime。当您使用 ThreeTenABP 时,类似的代码也适用于 26 级之前的 Android。在这种情况下,转换类似于Date date = DateTimeUtils.toDate(d.toInstant()):
  • 我的最低 API 级别是 21,但这些都不起作用
  • 我假设 API 级别 21 与 JDK 7 兼容。
  • @Kishita ZonedDateTime 版本有效。你需要做什么才能让它工作的详细解释是in this question: How to use ThreeTenABP in Android ProjectSimpleDateFormat 的 Android 版本有时可能与标准 Java 7 的行为不同。无论如何,这门课很麻烦。
  • 当我在我的时区运行 Oracle Java 上的答案中的 Java-7 sn-p 时;我预计时间是 01:21:29,因为我在 UTC 偏移 +02:00,所以差异应该是三个半小时。但是我得到Sat May 19 03:13:11 CEST 2018。 Android Java 仍有可能表现得更好。我听说它可以按预期在格式模式字符串中处理三个以上的S,而我们刚刚看到的标准SimpleDateFormat 却没有。
猜你喜欢
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 2018-12-30
  • 2014-08-09
相关资源
最近更新 更多