关于Date类型转换成毫秒数会出现误差
来源:互联网 发布:淘宝网韩版式斗篷女装 编辑:程序博客网 时间:2024/06/02 06:57
public class DateTest { public static void main(String[] args) { //获取本周一开始时间 Calendar cal = Calendar.getInstance(); cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); System.out.println(cal.getTime()); }}
控制台会输出本周一的开始时间
Mon Apr 24 00:00:00 CST 2017
这样Date类型的数据是没错的,但是当把这个时间转换成毫秒数时就会出错了。
我写这个代码的时候是2017年4月25日,周一的真正开始时间毫秒数为
1492963200000。
public static void main(String[] args) { //获取本周一开始时间 Calendar cal = Calendar.getInstance(); cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //获得毫秒数 System.out.println(cal.getTime().getTime()); }
运行代码你会发现,你获得的毫秒数并非1492963200000,而是会出现误差,每次运行的结果都不一样。比如:输出如下数据
1492963200592
1492963200789
我是因为做需求的时候要判断取出来的时间是否小于本周一开始时间,小于的话意味着该数据为本周之前的时间。结果碰到了刚好为本周一开始的时间,判断就出现了问题,这样才发现问题。
不只是这个查询本周一的时间毫秒数会出现偏差,只要你用cal来查询本周本月本年的日期都会出现问题。
你可以选择这么写就不会有问题了,以获取当天24点时间为例
public class DateTest { public static void main(String[] args) { //获取今天24点时间 Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 24); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.MILLISECOND, 0); //获得毫秒数 System.out.println(cal.getTime().getTime()); }}
建议:判断日期可以直接用date的before、after来比较就可以。这两个方法其实本质上用的也是毫秒数来比较,只是做了封装了。
date类型不能不能用大小于来比较,要用before、after来比较。
if(date1>date2){};这种写法是错误的。
0 0
- 关于Date类型转换成毫秒数会出现误差
- 关于毫秒数转date类型的细节问题
- 将Long类型的毫秒数转换成时间格式
- java中日期时间格式与毫秒数的转换如何将指定时间转换为Date类型
- 毫秒-date互相转换
- Oracle中根据Date型转换成Java对应的long型毫秒数
- Oracle中根据Date型转换成Java对应的long型毫秒数
- Oracle中根据Date型转换成Java对应的long型毫秒数
- RFC822格式转换为date并算出毫秒数
- 在数据库里如何将毫秒转换成date格式
- EL表达式 Date 格式时间转换成毫秒
- java关于Date类型的转换
- java字符串怎么转换成时间date格式,并把date再转换成毫秒
- 关于String类型转换成Date,再转换成String类型
- 关于String类型转换成Date,再转换成String类型
- 时间戳转 Date 字符串出现误差
- String转换成date类型
- ISO8601转换成Date类型
- POJ 2387 最短路 贝尔曼福特和迪杰斯特拉双解
- 编译opencv自带例子
- 剑指offer:(16)代码的鲁棒性:反转链表
- Android中的View全解析(二)
- Mongodb学习笔记
- 关于Date类型转换成毫秒数会出现误差
- unity3d中水草海草摇动效果顶点动画材质
- Linux网络命令及其其他
- 核范数与规则项参数选择
- js:this
- Sublime+node开发插件设置
- JDBC浅析
- linux进程管理笔记
- this,context,getActivity()和getApplicationContext()