在开发中碰到这样一个问题:计算出30天以前的时间,
开始用下面代码实现:
Date today = new Date(); Timestamp todaytime = new Timestamp(today.getTime()); Timestamp sometime = new Timestamp(todaytime.getTime() - 30 * (24 * 60 * 60 * 1000)); System.out.println("today:" + todaytime); System.out.println("sometime:" + sometime);
你一定想不到会输出下面的结果:
today : 2008-07-07 11:05:25.484
sometime : 2008-07-27 04:08:12.78
减去了毫秒数结果得到了一个未来的时间,开始以为是Timestamp内有问题,其实不然,看下面:
long t = 30 * (24 * 60 * 60 * 1000);
System.out.println(t);
输出:-1702967296
不可思议吧,居然是负数,再看下面:
long t = 30l * (24l * 60l * 60l * 1000l); System.out.printf("t=%d,int max=%d",t,Integer.MAX_VALUE); 输出: t=2592000000,int max=2147483647
原来运算结果超出了 int 的最大值,如果用 32 位存放数据就会溢出变成负数。