概述
文章目录
- 注
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){};这种写法是错误的。
注
- 文章是个人知识点整理总结,如有错误和不足之处欢迎指正。
- 如有疑问、或希望与笔者探讨技术问题(包括但不限于本章内容),欢迎添加笔者微信(o815441)。请备注“探讨技术问题”。欢迎交流、一起进步。
最后
以上就是满意中心为你收集整理的关于Date类型转换成毫秒数会出现误差注的全部内容,希望文章能够帮你解决关于Date类型转换成毫秒数会出现误差注所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复