时间延期的功能是一个非常简单也是一个很常见的一个功能,实现的方法有很多,我只是记录了我愚蠢的错误,和大家共勉。
当时我第一个反应就是通过获取到Date类型对象的时间戳,加上要增减的时间戳就完事了,就是像这个样子。
int delay = 1;
Date now = new Date();
long time = now.getTime()+delay*24*60*60*1000;
System.out.println(now);
System.out.println(new Date(time));
结果为:
Thu Oct 12 15:07:25 CST 2017
Fri Oct 13 15:07:25 CST 2017
在数字比较小的时候确实挺正常,但是,测试跑来说我这里会延期了30天却反而提前了。
以下是delay取30时的结果:
Thu Oct 12 15:08:50 CST 2017
Fri Sep 22 22:06:03 CST 2017
嘿,确实有点问题,在一阵debug之后发现了错误的原因,看了以下代码就明白了。
int delay = 30;
System.out.println(delay*24*60*60*1000);
System.out.println(delay*24*60*60*1000l);
System.out.println(Integer.MAX_VALUE);
-1702967296
2592000000
2147483647
这里需要加的时间戳超出了Integer的最大的值,所以,我在这里犯了一个很愚蠢的错误。
改为以下代码就可以了
int delay = 30;
Date now = new Date();
long time = now.getTime()+delay*24*60*60*1000l;
System.out.println(new Date(time));