今天在计算两个时间月份间隔的时候遇到了以前没注意的一个坑,以前一直没留意long a = 100L和long a = 100的区别,今天遇到的这个坑让我弄明白了,也怪自己菜。
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat = new
SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = simpleDateFormat.parse("2021-01-20 00:00:00");
long interval = new Date().getTime() - date.getTime();
long unit = 1000*3600*24*30;
double months = interval/unit;
System.out.println(months);
}
到了unit这一步,unit的值一直是个负数,网上找long的范围比1000*3600*24*30
的范围大的多,照理说不会产生溢出。然后想到可不可能是int的范围。
网上搜了一下,不加L的默认是int,占4个字节;加L是long类型,8个字节。
把long unit = 1000*3600*24*30;
改成long unit = 1000*3600*24*30L;
就一切正常了,