oracle里面有个add_months函数可以对某个日期做加多少个月份的操作,对日期做加法更简单只需用+号就可以了。可是在java里面要实现日期加多少天,只能自己写个方法了。
一种途径是:
1 得到基准日期对应的毫秒数 a = date.getTime()
2 得到要加的天数的毫秒数 b = n天*每天毫秒数(t=24*60*60*1000)
3 c = a+b,然后返回new Date(c);
我一直采用这种方法,直到今天忽然发现不对劲。n=24还没问题,当n>=25时结果就不对劲变小了。
这实在太奇怪了,为什么呢?难道是jdk的bug?
几经测试,终于发现问题所在:
原来我定义 t=24*60*60*1000时前面的类型修饰符是int,这样t*24的时候没问题,t*25时就超过int的最大范围变成负数了,于是a+b的结果就变小了,从而最后相加了n天后的日期反而比基准日期小了。
本文介绍了一种在Java中为日期增加天数的方法,并通过一个具体案例揭示了使用整型变量进行时间计算可能导致的溢出问题。作者最初采用将日期转换为毫秒数再进行加法运算的方式,但在尝试增加25天以上时遇到了日期回退的异常现象。经过排查,最终发现问题是由于整型变量乘法运算超过了其最大表示范围。
5万+

被折叠的 条评论
为什么被折叠?



