有时会发生Android Parse Exception

问题描述

嗨,我有一个奇怪的问题。我正在从网上按预期方式获取一些xml数据。 当我调用在片段中获取数据的方法时,一切都很好,但是如果我在另一个片段中为相同的url调用完全相同的方法,则会抛出此奇怪的解析异常,在此尝试将传入的日期字符串转换为较长的时间戳(以毫秒为单位)。 如果错误在不起作用的片段中发生一次,则它也会在先前起作用的片段中停止工作。 它会引发此异常:

java.text.ParseException: Unparseable date: "Sun,30 Aug 2020 00:32:42 +0000"

我用于简单日期格式的模式是

"EEE,dd MMM yyyy HH:mm:ss Z"

有人可以告诉我为什么会这样吗,因为我使用的模式似乎可以工作,为什么我会得到这个异常?

解决方法

我建议您从过时且容易出错的java.util日期时间API和SimpleDateFormat切换到modern java.time日期时间API和相应的格式化API (软件包java.time.format)。从 Trail: Date Time 了解有关现代日期时间API的更多信息。

如果您的Android API级别仍不兼容Java8,请选中How to use ThreeTenABP in Android ProjectJava 8+ APIs available through desugaring

使用Java现代日期时间API进行以下操作:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Given date-time string
        String dateTimeString = "Sun,30 Aug 2020 00:32:42 +0000";

        // Parse the given date-time string into OffsetDateTime as it has a Zone Offset
        // of +0000 hours
        OffsetDateTime odt = OffsetDateTime.parse(dateTimeString,DateTimeFormatter.RFC_1123_DATE_TIME);

        // Display OffsetDateTime in the default format
        System.out.println(odt);

        // Display OffsetDateTime in some custom formats
        System.out.println(odt.format(DateTimeFormatter.RFC_1123_DATE_TIME));
        System.out.println(odt.format(DateTimeFormatter.ofPattern("u-MM-dd HH:mm:ss X")));
    }
}

输出:

2020-08-30T00:32:42Z
Sun,30 Aug 2020 00:32:42 GMT
2020-08-30 00:32:42 Z

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...