Java日期解析时区导致解析错误

提问

我收到带有以下代码的ParseException,但似乎无法修复:

String date = "Tue Mar 13 2012 10:48:05 GMT-0400";
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzzX"); //Tried zzzZ at the end as well
System.out.println(format.parse(date));

如果我在SimpleDateFormat的末尾取出-0400和X(或Z),则一切正常,但是一旦在代码中,就根本不起作用.我应该改用什么符号?我正在使用Java 7.

这是我收到的解析错误:

java.text.ParseException: Unparseable date: "Tue Mar 13 2012 10:48:05 GMT-0400"
at java.text.DateFormat.parse(DateFormat.java:357)
java.text.ParseException: Unparseable date: "Tue Mar 13 2012 10:48:05 GMT-0400"
at java.text.DateFormat.parse(DateFormat.java:357)
at com.throwaway.parse.DateParsing.testDate(TestDate:17)

最佳答案

字符串的GMT-0400的GMT部分引起了问题.
Z(或Java 7中的X)参数仅匹配-4000.您必须通过使用单引号将GMT转义:

DateFormat format = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z", Locale.US);

请注意,将Local放置在DateFormat中也是一种好习惯.没有它,您的代码将无法在其他国家/地区使用(例如在法国…).