時(shí)間延期的功能是一個(gè)非常簡(jiǎn)單也是一個(gè)很常見的一個(gè)功能,實(shí)現(xiàn)的方法有很多,我只是記錄了我愚蠢的錯(cuò)誤宴偿,和大家共勉湘捎。
當(dāng)時(shí)我第一個(gè)反應(yīng)就是通過獲取到Date類型對(duì)象的時(shí)間戳,加上要增減的時(shí)間戳就完事了酪我,就是像這個(gè)樣子消痛。
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));
結(jié)果為:
Thu Oct 12 15:07:25 CST 2017
Fri Oct 13 15:07:25 CST 2017
在數(shù)字比較小的時(shí)候確實(shí)挺正常且叁,但是都哭,測(cè)試跑來說我這里會(huì)延期了30天卻反而提前了。
以下是delay取30時(shí)的結(jié)果:
Thu Oct 12 15:08:50 CST 2017
Fri Sep 22 22:06:03 CST 2017
嘿逞带,確實(shí)有點(diǎn)問題欺矫,在一陣debug之后發(fā)現(xiàn)了錯(cuò)誤的原因,看了以下代碼就明白了展氓。
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
這里需要加的時(shí)間戳超出了Integer的最大的值穆趴,所以,我在這里犯了一個(gè)很愚蠢的錯(cuò)誤遇汞。
改為以下代碼就可以了
int delay = 30;
Date now = new Date();
long time = now.getTime()+delay*24*60*60*1000l;
System.out.println(new Date(time));