在处理Long 型时间值的计算过程中,被JAVA 狠狠的坑了一次,如下的程序:
long thisTime = 1380000000000;
long monthAgo = thisTime - 30 * 24 * 60 * 60 * 1000;
本以为,JAVA 会将后面计算的结果转换成 long 值后再与前面的计算,调试过程中发现,java 是先计算后面的数值,为 int 类型,结果超过了 int 类型,被截断了,然后再将这个截断的数值转换成 long 型,再与前面的 thisTime 计算。
坑死了,这样计算出来的结果能对么,如果在计算的某一步中,觉得值会超过 long ,那么就需要在这一步之前将计算结果转为 long 型后再计算,因此修改后代码为:
long monthAgo = thisTime - 30 * 24 * 60 * 60 * 1000L;
这样结果就正确了。