【问题标题】:unexpected results with GMT parsing in javajava中GMT解析的意外结果
【发布时间】:2011-10-20 14:55:18
【问题描述】:

我正在使用下面的代码将字符串解析为日期 GMT->EDT。我不明白我看到的结果。

        SimpleDateFormat dformat = new SimpleDateFormat("yyyyMMdd-hh:mm:ss");
        TimeZone gmt = TimeZone.getTimeZone("GMT");
        dformat.setTimeZone(gmt);
        Date d = dformat.parse(time);

如果 time = "20111019-13:00:00",则 d 最终会是 2011 年 10 月 19 日星期三 09:00:00 EDT。但是,如果 time = "20111019-12:59:59",则 d 会以某种方式结束2011 年 10 月 18 日星期二 20:59:59 EDT。这怎么可能?

【问题讨论】:

    标签: java parsing time


    【解决方案1】:

    您的意思是 HH:mm:ss 用于时间组件,而不是 hh:mm:ss。它使用 12 小时制,并将 12:59:59 解释为有效的 00:59:59。

    请注意,您的解析不会执行到特定时区的转换 - 因为Date 不知道时区。您之所以看到 EDT,是因为(我怀疑)您正在打印 d.toString(),它始终使用本地时区。

    Java 日期/时间 API 非常糟糕 - 如果可能的话,我强烈建议您改用 Joda Time,在那里您可以使用 确实 有的 DateTime时区...并允许您在它们之间进行转换。

    【讨论】:

    • 抱歉,当我注意到问题出在我发布的部分时,我省略了实际转换的代码。有道理,谢谢!我也不喜欢日期功能,但在这种情况下这是我唯一的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多