背景:最近在写一个项目时,有这样的一个需求。需要得到当前时间的下一天以及30后的时间。在计算30天后的时间时出现了一点问题,时间出错,但是感觉自己的公式没有出错,后来才发现是运算超出了Integer的范围。
( 24 * 60 * 60*1000) 这种计算表达式在 Java中是默认以 Integer类型来的,若不超过 Integer的最大值则没有问题,若超过则必须加上L ( 24 * 60 * 60*1000L)
当然为了避免出现此类问题,也可以采用最粗暴的方法,就是不管 表达式的计算结果是否超过了 Integer的最大值,都用 L来标识 是个 Long类型,这样绝对不会出错。若是一眼就能计算出来的
可以不用加L,比如:(8 * 24 * 32) 基本肯定不会超过 Integer的最大值不用加L也行,若是一眼计算不出来感觉很大的如:(180 * 24 * 500 * 24) 这种一眼计算不出来,且感觉会超过 Integer的最大值的
需要加L来标识 计算出来的结果是一个Long类型,以防止溢出Bug.
import java.util.Date;
public class Test {
public static void main(String[] args) {
//获取当前时间的下一天的时间
Date date1=new Date(System.currentTimeMillis()+24*60*60*1000);
System.out.println(date1);
//获取当前时间的30天后的时间
/*
如果运算中不加L的话会出错
Date date30=new Date(System.currentTimeMillis()+24*60*60*1000*30);
*/
Date date30=new Date(System.currentTimeMillis()+24*60*60*1000*30L);
System.out.println(date30);
}
}