java.util.Date的一个bug还是因为什么别的其他原因?

java.util.Date的一个bug还是因为什么别的其他原因?

问题描述:

我始终无法用java.util.Date类来描述19900415这个日子

执行如下代码得到的却是1990-04-15 01:00:00,这个是不是夏时制的问题?怎么解决呢?

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
Date d =sdf.parse("1990-04-15 00:00:00");
String s =sdf.format(d);
System.out.println(s);

我使用的jdk版本是1.6_13

你可以看到1900 4.14, 4.16号都没有问题,那么基本可以确定是4.15号这一天调整了夏令时,即将在4月15号0点的时候将表调快一小时,这导致这一天少了一小时。
这个问题我以前遇到过。

[code="java"]
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
Date d =sdf.parse("1990-04-15 00:00:00");
[/code]
额。。。转换格式是yyyyMMdd,参数格式怎么是yyyy-MM-dd。。。

Date 的很多方法都 deprecated 了, Date.getHours() 得到的值是 1, 而我尝试过的其他日子 ate.getHours() 得到的值是 0.
不知道这是什么原因, 查阅过文档, 没有找到确切信息. 找到的一个信息是:
"Although the Date class is intended to reflect coordinated universal time (UTC), it may not do so exactly, depending on the host environment of the Java Virtual Machine."
Date 并不能精确表示 UTC 的时间, 原因是没有考虑到 Leap second.

解决方法:
我想, 还是用 GregorianCalendar 吧. 至于Date的这个奇怪行为, 我也想知道为什么

这跟是不是deprecated没关系。
这只是说明那天在你的当前时区里不存在0点这个时间。