Java 从字符串解析日期

Java 从字符串解析日期,java,xml,parsing,date,Java,Xml,Parsing,Date,我将以下时间戳存储为一个字符串,我希望使用SimpleDataFormat解析该字符串,但在转换时遇到一些问题: 我从xml文件中读取的时间戳:Tue Dec 31 09:29:08 PDT 2013 我的代码: String timeStamp = innerNode.getTextContent(); //innerNode is a Node object that contains my TimeStamp from an xml file. System.out.println(t

我将以下时间戳存储为一个字符串,我希望使用
SimpleDataFormat
解析该字符串,但在转换时遇到一些问题:

我从xml文件中读取的时间戳:
Tue Dec 31 09:29:08 PDT 2013

我的代码:

String timeStamp = innerNode.getTextContent();   //innerNode is a Node object that contains my TimeStamp from an xml file.
System.out.println(timeStamp);
SimpleDateFormat dateFormat = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy");
dateFormat.setTimeZone(TimeZone.getTimeZone("PDT"));
dateFormat.parse(timeStamp);

Date firstParsedDate = dateFormat.parse(timeStamp);
System.out.println(firstParsedDate);
这很有效,但我的结果很奇怪。我的结果是:
2013年12月31日星期二11:29:08 CDT


你知道怎么了吗?谢谢。

日期。toString
不会使用您为创建它的
SimpleDataFormat
输入的时区。相反,您应该:

System.out.println(dateFormat.format(firstParsedDate));

这应该使用在格式化程序上设置的正确时区
toString
只使用系统时区。

java中的日期对象将使用系统时区。您的系统处于CDT时区,而不是PDT。所以日期是用CDT打印的。

当然。请注意,您得到的时间仍然正确(PDT 9:29与CDT 11:29相同)。因此,您的解析器正在工作。还要注意,您不必设置时区来解析它。由于您在格式字符串中使用了
z
,因此它可以在解析时为您找到它。在您的情况下,时区仅用于打印。