错误示例:

Date today = new Date();
Date nextMonth = new Date(today.getTime() + 30* 1000*60*60*24);
println(today);
println(nextMonth);

Result:  Sat Sep 30 11:18:24 CST 2017

Sun Sep 10 18:15:37 CST 2017

代码说明:上面代码的目的是计算一个月后的日期,从结果发现明显是错误的(回到上个月去了)

原因分析:30* 1000*60*60*24 ,这个表达式,本意是为了获取一个月的毫秒数,用于计算。但是java默认是用int类型来做表达式的返回结果类型的,而这个表达式已经超过int类型的最大值范围,所以变成负数了。导致了计算结果错误。

正确代码(示例一):在表达中加L标识转成long型计算

Date today = new Date();
Date nextMonth = new Date(today.getTime() + 30L * 1000*60*60*24);
println(today);
println(nextMonth);

Result: Sat Sep 30 11:22:06 CST 2017
Mon Oct 30 11:22:06 CST 2017

正确代码(示例二):把一天的毫秒数作为一个独立的long型常量封装好,以后在计算的时候,自动作为long型处理

Date today = new Date();
long ONE_DAY_MILLISECONDS = 1000*60*60*24;
Date nextMonth = new Date(today.getTime() + 30 * ONE_DAY_MILLISECONDS);
println(today);
println(nextMonth);

Result: Sat Sep 30 11:23:02 CST 2017
Mon Oct 30 11:23:02 CST 2017

  

踩坑感悟:

JAVA语言在做数字计算的时候,并没有办法像解释型语言(如Python)那样,可以输入很长的表达式直接运算。作为数字的表达式,由于有int类型的限制,所以超过一定范围,一定要显示的转类型(L\D),不然就会计算出错。如果这个计算的参数由用户自己输入的话,更要注意这个问题(最好转成字符串,再用比较大的数据类型去解析)

最新文章

  1. python自动化测试(2)-自动化基本技术原理
  2. 使用Nominatim进行openstreetmap地址搜索/解析
  3. HJ-第二周,真机调试
  4. ASP.NET(转自wiki)
  5. java静态和动态代理原理
  6. js常用方法
  7. spring 连接各种数据源的配置(转载)
  8. SVN错误:run 'cleanup' if it was interrupted的解决
  9. Linux sed Examples--转载
  10. 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法
  11. 【网络流24题】 No.6 最长不减子序列问题 (最大流)[模型:最多不相交路径]
  12. 开源cms
  13. css链接
  14. Redis 学习数据类型
  15. 利用wsdl.exe自动将wsdl文档转换为C#代码
  16. JavaScript 基础(二) - 创建 function 对象的方法, String对象, Array对象
  17. 斜率优化dp的总结
  18. ubuntu 安装 c语言的库函数man手册
  19. PLC 通讯
  20. springboot中配置文件application.properties的配置详情,数据源配置

热门文章

  1. vue editorConfig
  2. 处理springmvc的post和get提交参数乱码问题
  3. Maven配置阿里云镜像仓库
  4. windows 7/10 安装u盘制作
  5. SqlBulkCopy类(将一个表插入到数据库)
  6. Building a Keras + deep learning REST API(三部曲之一)
  7. 20145212 罗天晨 WEB登陆发贴及会话管理功能的实现
  8. 前端 --- 7 Bootstrop框架
  9. python 函数,闭包
  10. linux内核发生Oops时怎么办?