如何解决 java.text.ParseException: Unparseable date?

How to solve java.text.ParseException: Unparseable date?

我正在尝试将其转换为可读格式,但是,请继续获取 java.text.ParseException: Unparseable date: "2016-11-18T11:13:43.838Z" (at offset 23)

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
try {
    Date date1 = df.parse("2016-11-18T11:13:43.838Z");

    DateFormat outputFormatter1 = new SimpleDateFormat("dd-MMM-yyyy");
    String output1 = outputFormatter1.format(date1); //
} catch (ParseException e) {
    e.printStackTrace();
}

我阅读了有关添加区域设置的其他 SO 答案的建议,但它仍然无法正常工作。

根据 docs,格式字符串中的 Z 表示 RFC 822 时区,例如+01:00。您需要解析 ISO 8601 时区(输入字符串中的 Z 表示 UTC 时区)。你配置 X:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX", Locale.US);

您正在解析的字符串不是该模式的正确表示形式,您缺少时区...类似于:-0600

示例:

Date date1 = df.parse("2016-11-18T11:13:43.838-0600Z");

这里是 doc 了解更多信息....

您的代码应如下所示:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    try {
        Date date1 = df.parse("2016-11-18T11:13:43.838-0600Z");
        DateFormat outputFormatter1 = new SimpleDateFormat("dd-MMM-yyyy");
        String output1 = outputFormatter1.format(date1); //
    } catch (ParseException e) {
        e.printStackTrace();
    }

阅读 SimpleDateFormat 的 Javadoc,我发现对时区使用 Z 非常严格。它不会将 "Z" 识别为祖鲁语,它只接受数字时区偏移量。 您可能想尝试 X,根据文档接受 "Z"

请试试这个格式

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");