如何使用类型为 2015-01-13T10:24:55Z 的 java 中的 SimpleDateFormat 解析日期

how to parse date using SimpleDateFormat in java of type 2015-01-13T10:24:55Z

我有以下日期字符串来自 android 应用程序中的 grails 服务。

2015-01-13T10:24:55Z

现在我想使用 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"); 解析这个字符串 但我在 logcat 中收到错误消息。

01-13 10:53:50.674: W/System.err(1794): java.text.ParseException: Unparseable date: "2015-01-13T10:24:55Z" (at offset 10)

请告诉我如何解析这种类型的字符串。

用引号 'Z' 将 Z 括起来,并传递正确的区域设置信息。此外,为了不依赖默认时区,请将时区明确设置为 UTC,以便可以正确解析您的日期 例如

    public static void main(String args[]) throws ParseException {

    String date = "2015-01-13T10:24:55Z";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.CANADA);
    sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
    Date parse = sdf.parse(date);
    System.out.println(parse);        
    }

输出

Tue Jan 13 10:24:55 CET 2015

目前您正在使用 "general time zone" 说明符。为了将 Z 解释为 "this value is in UTC",您应该使用 X:

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.US)

X 是一个 ISO-8601 时区说明符,其中包括 Z 表示 UTC。

或者,您可以将其作为文字引用并将时区明确指定为 UTC:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'",
                                               Locale.US);
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

在这种情况下明确设置时区很重要,否则将使用系统默认时区解析值。