java date类型做加法发现的问题
2007-11-20 17:52
387 查看
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天后的日期反而比基准日期小了。
一种途径是:
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天后的日期反而比基准日期小了。
相关文章推荐
- 关于SpringMVC+java+mysql的Date类型的时间问题
- 使用Hibernate轻松解决java中date与datetime类型不兼容的问题
- Java JSON Date类型数据处理问题
- 关于Java读取mysql中date类型字段默认值'0000-00-00'的问题
- Java JSON Date类型数据处理相关问题
- SpringMVC 参数绑定获取的CST时间(Java.util.Date)类型问题
- JSON(3):Java的Date类型转换为符合json语法的字符串遇到的问题及其解决办法
- java.util.date类型保存到mysql数据库报错的问题
- 使用Hibernate轻松解决java中date与datetime类型不兼容的问题
- Java实体Date类型属性值无法保存到数据表对应字段的问题
- java spring jdbc Oracle DATE 类型读取时没有时分秒问题及解决方案
- Java向MySQL数据库插入时间类型Date数据时需要注意的问题
- 关于Java读取mysql中date类型字段默认值'0000-00-00'的问题
- 解决mysql 数据库中日期类型00:00:00 的问题 设置xml数据类型:java.util.Date
- 解决mysql 数据库中日期类型00:00:00 的问题 设置xml数据类型:java.util.Date
- Java向MySQL数据库插入时间类型Date数据时需要注意的问题
- 解决axis2处理java.util.Date类型对象时丢弃时间部分的问题
- hibernate 中使用oracle数据库 与java Date数据类型 只显示到天 不显示时分秒的问题
- 关于Java读取mysql中date类型字段默认值'0000-00-00'的问题
- JSONObject处理Date类型 java.sql.Date 转化java.util.Date 问题