意外的java SimpleDateFormat解析exception

我无法理解为什么这几行

Date submissionT; SimpleDateFormat tempDate = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy"); public time_print(String time) { try { submissionT=tempDate.parse(time); } catch (Exception e) { System.out.println(e.toString() + ", " + time); } } 

导致exception并打印出来

  java.text.ParseException: Unparseable date: "Tue Mar 31 06:09:00 CEST 2009", Tue Mar 31 06:09:00 CEST 2009 

…虽然“不可解决的”时间符合我传递给SimpleDateFormat()的格式字符串..任何想法?

这是一个Locale问题。 使用:

 sdf = SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.US); 

适合我。

 public class Main { public static void main(String[] args) { time_print("Tue Mar 31 06:09:00 CEST 2009"); } static Date submissionT; static SimpleDateFormat tempDate = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy"); public static void time_print(String time) { try { submissionT=tempDate.parse(time); System.out.println(submissionT); } catch (Exception e) { System.out.println(e.toString() + ", " + time); } } 

}

格式中的“z”表示TimeZone,Java仅识别某些时区ID。 您可以将TimeZone类中的列表作为字符串数组获取。 CEST没有出现在我刚刚从JDK 1.5生成的列表中

 String[] aZones = TimeZone.getAvailableIDs(); for (int i = 0; i < aZones.length; i++) { String string = aZones[i]; System.out.println(string); } 

希望这可以帮助。