java中GMT解析的意外结果
我使用下面的代码将字符串解析为日期 GMT->EDT。我不明白我所看到的结果。
SimpleDateFormat dformat = new SimpleDateFormat("yyyyMMdd-hh:mm:ss");
TimeZone gmt = TimeZone.getTimeZone("GMT");
dformat.setTimeZone(gmt);
Date d = dformat.parse(time);
如果时间 =“20111019-13:00:00”,则 d 最终会成为 2011 年 10 月 19 日星期三 09:00:00 EDT。但是,如果时间 =“20111019-12:59:59”,则 d 最终会成为星期二2011 年 10 月 18 日 20:59:59 EDT。怎么会这样?
I am using the code below to parse a String into a date GMT->EDT. I don't understand the results I am seeing.
SimpleDateFormat dformat = new SimpleDateFormat("yyyyMMdd-hh:mm:ss");
TimeZone gmt = TimeZone.getTimeZone("GMT");
dformat.setTimeZone(gmt);
Date d = dformat.parse(time);
If time = "20111019-13:00:00", then d ends up being Wed Oct 19 09:00:00 EDT 2011. However, if time = "20111019-12:59:59", d somehow ends up being Tue Oct 18 20:59:59 EDT 2011. How can this be?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您指的是时间组件的
HH:mm:ss
,而不是hh:mm:ss
。它使用 12 小时制,并将 12:59:59 解释为有效的 00:59:59。请注意,您的解析不会执行到特定时区的转换 - 因为
Date
不知道时区。您只看到 EDT,因为(我怀疑)您正在打印d.toString()
,它始终使用本地时区。Java 日期/时间 API 非常糟糕 - 如果可以的话,我强烈建议您转向 Joda Time< /a> 相反,您可以使用
DateTime
,它确实有一个时区......并允许您在它们之间进行转换。You meant
HH:mm:ss
for the time component, nothh:mm:ss
. It was using the 12-hour clock, and interpreting 12:59:59 as effectively 00:59:59.Note that your parsing does not perform a conversion to a particular time zone - because
Date
doesn't know about time zones. You're only seeing EDT because (I suspect) you're printing outd.toString()
, which always uses the local time zone.The Java date/time API is pretty awful - if you possibly can, I'd strongly advise you to move to Joda Time instead, where you would use a
DateTime
which does have a time zone... and lets you convert between them.