java用毫秒数做日期计算的一个踩坑记录
错误示例:
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),不然就会计算出错。如果这个计算的参数由用户自己输入的话,更要注意这个问题(最好转成字符串,再用比较大的数据类型去解析)
java用毫秒数做日期计算的一个踩坑记录的更多相关文章
- JAVA把毫秒数转换成日期
JAVA把毫秒数转换成日期 systemMillonSenconds = System.currentTimeMillis(); 2012-08-17 14:42 1456人阅读 评论(1) 收藏 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- Calendar计算一个月前的日期,踩坑记录
错误示范:calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);//获取一个月前的今天这种写法假设传入的日期为2019-03-3 ...
- java ArrayList 踩坑记录
做编程的一个常识:不要在循环过程中删除元素本身(至少是我个人的原则).否则将发生不可预料的问题. 而最近,看到一个以前的同学写的一段代码就是在循环过程中删除元素,我很是纳闷啊.然后后来决定给他改掉.然 ...
- Java int和integer有什么区别 (mybatis踩坑)
不要在实体类中使用int 我们都知道Integer是int的包装类,而int是基本数据类型.所以Integer类型的变量会初始化为null,int类型则会被初始化为0 . 所以在下面的动态拼接例子中: ...
- Java实现 蓝桥杯 算法提高 日期计算
算法提高 日期计算 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情 ...
- lua时间戳和日期转换及踩坑
介绍lua的日期函数常用方法及我的一个踩坑. 时间戳转日期 os.date("%Y%m%d%H",unixtime) --os.date("%Y%m%d%H", ...
- java 获取两个日期相差的毫秒数
方法一可以使用date的getTime()方法来将当前日期格式的时间转换为毫秒数,进而相减. long systime = new Date().getTime();//当前系统时间 l ...
- 【转】Java日期计算之Joda-Time
Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成. http:// ...
随机推荐
- jquery遍历获取每一行数据进行对比
$("#dtlTable tr:gt(0)").each(function(i){ var orderQtyBy = $("input[name='orderQtyBys ...
- java之分隔符问题
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^ 报这个错的原因是因为在java中“ ...
- pycharm快捷键及常用设置
Alt+Enter 自动添加包 shift+O 自动建议代码补全 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+Shift+F 高级查找 C ...
- 计算概论(A)/基础编程练习2(8题)/6:数组逆序重放
#include<stdio.h> int main() { // 输入n个整数 ; scanf("%d", &n); // 循环读入元素 while(scan ...
- Zookeeper本地模式安装
本地模式安装部署 1.安装前准备 (1)安装Jdk (2)拷贝Zookeeper安装包到Linux系统下 (3)解压到指定目录 tar -zxvf zookeeper-3.4.10.tar.gz -C ...
- Storm学习笔记1:Storm基本组件
Storm概念及组件 Nimbus:负责资源分配和任务调度. Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程. Worker:运行具体处理组件逻辑的进程 ...
- Huffman Implementation with Python
Huffman Implementation with Python 码表 Token Frequency a 10 e 15 i 12 s 3 t 4 space 13 n 1 生成 Huffman ...
- Android之数据存储之SharedPreferences
SharedPreferences是以键值对形式存储数据,主要用于记录系统的设置,如飞行模式是否开启,声音大小的值等.//SharedPreferences方式保存到xml文件SharedPrefer ...
- python简说(十二)time模块
1.时间戳 print(int(time.time())) 2.取当前格式化好的时间 time.strftime('%Y-%m-%d %H:%M:%S') 3.时间戳转为格式化好的时间 time1 = ...
- LOIC
Pre: http://sourceforge.net/projects/loic Getting the Software To DDos, first your going to have to ...