【问题标题】:Parsing Date from String从字符串解析日期
【发布时间】:2013-05-06 19:38:03
【问题描述】:

我将以下时间戳存储为我想使用 SimpleDateFormat 解析的字符串,但我在转换时遇到了一些问题:

我从 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);

所以效果很好,但我的结果很奇怪。我的结果不是打印Tue Dec 31 09:29:08 PDT 2013,而是:Tue Dec 31 11:29:08 CDT 2013

任何想法有什么问题吗?谢谢。

【问题讨论】:

    标签: java xml parsing date


    【解决方案1】:

    Date.toString 不会使用您为创建它的SimpleDateFormat 输入的时区。相反,您应该这样做:

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

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

    【讨论】:

    • 当然。请注意,您得到的时间仍然正确(太平洋夏令时间 9:29 与 CDT 11:29 相同)。所以你的解析器正在工作。另请注意,您不必设置时区来解析它。由于您在格式字符串中使用了z,因此它可以在解析时为您找出答案。在您的情况下,时区仅用于打印。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      相关资源
      最近更新 更多