我有来自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)
请让我知道如何解析这种类型的字符串。
答案 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