如何使用类型为 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"));
在这种情况下明确设置时区很重要,否则将使用系统默认时区解析值。
我有以下日期字符串来自 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"));
在这种情况下明确设置时区很重要,否则将使用系统默认时区解析值。