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

时间:2015-01-13 11:07:02

标签: java simpledateformat

我有来自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)

请让我知道如何解析这种类型的字符串。

2 个答案:

答案 0 :(得分:6)

目前您正在使用"一般时区"符。要将Z解释为"此值为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"));

在这种情况下显式设置时区非常重要,否则将使用系统默认时区解析该值。

答案 1 :(得分:1)

在引号'Z'中环绕Z并传递正确的区域设置信息。此外,为了不依赖于默认时区,请将时区明确设置为UTC,以便正确解析日期 E.g。

    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