29

谁能告诉我为什么我得到了这个例外?

08-28 08:47:05.246: D/DateParser(4238): 收到解析的字符串是 2013-08-05T12:13:49.000Z

private final static String DATE_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";


public static Date parseDate(String stringToParse) {
        Date date = null;
        try {
            date = new SimpleDateFormat(DATE_FORMAT_PATTERN).parse(stringToParse);
        } catch (ParseException e) {
            Logger.logError(TAG, e);
        }
        return null;
    }

08-28 08:47:05.246: E/DateParser(4238): Exception: java.text.ParseException: Unparseable date: "2013-08-05T12:13:49.000Z" (at offset 23)
4

4 回答 4

81

尝试使用

String DATE_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

最后Z的通常是时区偏移量。如果你不需要它,也许你可以把它放在两边。

于 2013-08-30T06:12:34.100 回答
12

在格式字符串的末尾使用X而不是:Z

yyyy-MM-dd'T'HH:mm:ss.SSSX

解析 ISO-8601 格式的时区偏移量。

(仅当您使用 Java 7 时才有效。请参阅此问题)。

于 2013-08-28T08:54:52.977 回答
2

您的Z时间字符串中的 不是有效的时区标识符,但您指定的时间格式需要一个时区标识符。更具体地说,它需要一个RFC 822 时区标识符,通常为 4 位数字。

于 2013-08-28T08:53:32.010 回答
0

从 java-8 你可以直接使用ZonedDateTime或者Instant如果它在ISO_INSTANT

ZonedDateTime.parse("2013-08-05T12:13:49.000Z")

Instant.parse("2013-08-05T12:13:49.000Z")
于 2019-10-30T01:37:11.090 回答