gpt4 book ai didi

java - Android 无法解析日期 : "2017-12-01 00:00:00+01"

转载 作者:行者123 更新时间:2023-12-02 11:44:48 31 4
gpt4 key购买 nike

我正在尝试解析日期时间字符串2017-12-01 00:00:00+01。我的模式如下:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");

Android 7 及更高版本会抛出异常“无法解析的日期:“2017-12-01 00:00:00+01””。

我发现了另一种模式:“yyyy-MM-dd HH:mm:ssX”,但它仅适用于 Android 7 及更高版本。

我尝试了在这里找到的解决方法“yyyy-MM-dd HH:mm:ssZZZZZ”,但它不起作用。

是否有一种解决方案也适用于 Android 7 以下的 Android?

最佳答案

我会给你好的解决方案和技巧。

java.time

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ssX");
OffsetDateTime dateTime = OffsetDateTime.parse(dateTimeString, formatter);
System.out.println(dateTime);

这会打印

2017-12-01T00:00+01:00

这是一个很好的解决方案:java.time,现代 Java 日期和时间 API。您希望在 Android 上执行此操作至少有两个原因。

  1. 您一直在使用的 SimpleDateFormat 类不仅早已过时,而且非常麻烦,所以我建议您无论如何都不要使用它,而且现代 API 好多了一起工作。
  2. 您的时区偏移量 +01 是 ISO 8601 偏移量。虽然只有 SimpleDateFormat 的更高版本可以解析此内容,但 java.time 自 ISO 8601 标准问世以来就在 ISO 8601 标准方面表现出色,因此这是一个安全的选择。

我应该说,您有一个面向 future 的好机会。

您的时间 00:00:00 似乎表明您只对日期感兴趣?如果是这样,java.time 为您提供了一个更好的选择,LocalDate 类表示不带时间的日期:

    LocalDate date = dateTime.toLocalDate();

这给出了 LocalDate 2017-12-01。

黑客攻击

您可以将 00 的偏移量附加到字符串中,问题中的格式化程序将解析它:

    dateTimeString += "00";

问题:如何在旧版 Android 上使用 java.time

如果您的 Android 设备上未内置 java.time,您将获得 ThreeTenABP 并将其添加到您的项目中,然后导入 org. Threeten.bp.OffsetDateTimeorg.thirden.bp.LocalDateorg. Threeten.bp.format.DateTimeFormatter。请参阅下面的链接。代码与上面相同。

链接

关于java - Android 无法解析日期 : "2017-12-01 00:00:00+01",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48288702/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com