我在程序中加了一些输出如下:
复制内容到剪贴板
代码:
import java.text.SimpleDateFormat;
public class AAA{
public static void main(String[] args){
String value = "1900-01-01 08:05:50";
System.out.println("value = " + value);
try{
long iii = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value,new java.text.ParsePosition(0)).getTime();
System.out.println("iii = " + iii);
java.sql.Timestamp xx = new java.sql.Timestamp(iii);
System.out.println("xx = " + xx.toString());
}catch(Exception e){
System.out.println(e);
}
}
}当value=1900-01-01 08:00:00时
当value=1900-01-01 08:05:52.0时
可以看出这两种情况中的iii值是一样的,为
-2208988800000。
Date类的getTime()函数的返回值是:自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
也就是说以上两个时间点到1970 年 1 月 1 日 00:00:00 GMT的毫秒数是一样的,
这个肯定是不对的。
接着我又把value改为1900-01-01 08:05:53也就是比1900-01-01 08:05:52.0多一秒。
这两个时间和1970 年 1 月 1 日 00:00:00 GMT相差应该是1000毫秒。
1900-01-01 08:05:53的iii为:
-2208988799000
与1900-01-01 08:05:52.0的iii:
-2208988800000
相差正好是1000,这是对的。
当时间为1900-01-01 07:59:59时
这时的iii为: -2208988801000
1900-01-01 08:00:00的iii为:-2208988800000
也正好相差1000,也是对的。
当时间为1900-01-01 08:00:01时
这时的iii为:-2208988799000
我加了几组数据,对比一下:
1900-01-01 07:59:59时的iii为:-2208988
801000,xx为:1900-01-01
07:59:59.0
1900-01-01 08:00:00时的iii为:-2208988
800000,xx为:1900-01-01
08:05:52.0
1900-01-01 08:00:01时的iii为:-2208988
799000,xx为:1900-01-01
08:05:53.0
1900-01-01 08:05:51时的iii为:-2208988
449000,xx为:1900-01-01
08:11:43.0
1900-01-01 08:05:52时的iii为:-2208988
800000,xx为:1900-01-01
08:05:52.0
1900-01-01 08:05:53时的iii为:-2208988
799000,xx为:1900-01-01
08:05:53.0
1900-01-01 08:05:54时的iii为:-2208988
798000,xx为:1900-01-01
08:05:54.0
通过对比,发现从1900-01-01 07:59:59到1900-01-01 08:05:54竟然发生了
时间倒流!!!
当过到1900-01-01 08:05:51时,这时的下一秒的iii应该为:-2208988
448000。
但1900-01-01 08:05:52的iii竟为:-2208988
800000。
当过到过到1900-01-01 08:05:52时,又回到了1900-01-01 08:00:00。太可怕了!!!
但当我们回忆那段时间的时候,时间竟然又消失了。
当我们从1900-01-01 08:05:52.0想它的前一秒的时候。
发现的竟然不是1900-01-01 08:05:51而是1900-01-01 07:59:59。
中间竟有5分52秒不存在了。
这究竟是什么原因引起的呢,是历史就是这样发生的,还是JDK的Bug造成的时间逆转。
我不知道其中的原因,还等待高手来解答!
[
本帖最后由 awp 于 2010-1-7 11:17 编辑 ]