java 求日期差
来源:互联网 发布:php加密函数 编辑:程序博客网 时间:2024/05/01 17:49
Part 1 求两个日期相差多少天
public long getDateDiff(Date date1, Date date2){
long s1 = date1.getTime();
long s2 = date2.getTime();
long interval = s2/86400000 - s1/86400000;//86400000=24*3600*1000 一天的毫秒数
return interval;
}
一开始是这么想的:使用getTime 函数取得特定日期到1970年1月1日凌晨的毫秒数,除以86400000后得到天数,两个天数相减就可以得到日期差。
实际测试却发现有错误:比如date1 = “2014-8-23 1:0:0”, date2 = “2014-8-23 13:0:0”
两个的日期差却是1
完整测试代码如下
class DateDiff{ public long getDateDiff(Date date1, Date date2){ long s1 = date1.getTime(); long s2 = date2.getTime(); long interval = s2/86400000 - s1/86400000; return interval; } public static void main(String[] args)throws ParseException{ Date date1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2014-08-23 1:59:59"); Date date2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2014-08-23 11:59:59"); DateDiff dateDiff = new DateDiff(); System.out.println("" + dateDiff.getDateDiff(date1, date2));//1 }}
没有马上想明白这个问题,就换了另一种方法求日期差。后来在发呆时灵光一闪,中国是东八区,英国19701-1-1的凌晨,在中国则是早上8点!所以对于北京时间来说,早上8点才是分界线,按前面的方法计算,同一天的8点前和8点后差了一天。
Part 2 求日期差的有效方法
虽然前面是错误的方法,但也提供了一条思路。
我们忽略两个日期的时分秒部分,求出相差的毫秒数,就可以求出相差的天数了。
private void setMidnight(Calendar cal){ cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0);} public long getDateDiff(Date date1, Date date2){ Calendar cal1=Calendar.getInstance(); Calendar cal2=Calendar.getInstance(); cal1.setTime(date1); cal2.setTime(date2); setMidnight(cal1); setMidnight(cal2); long s1 = cal1.getTimeInMillis(); long s2 = cal2.getTimeInMillis(); long interval = (s2 - s1)/86400000; return interval;}
代码思路:
1、获得两个日历对象
2、将两个日期分别设置给两个日历
3、将日历的时分秒部分都设置为0
4、获得两个日历相差的毫秒数
5、除以一天的毫秒数得到相差的天数
0 0
- java 求日期差
- javascript求日期差
- oracle 日期求差
- 关于java代码中求两个日期差的方法
- 日期格式化做减法求日期差
- 求日期之间的天数差
- 求两个日期之差 C/C++
- java应用两日期差
- JAVA---两个日期的差
- Java日期差计算天数
- Java 求今天日期
- 求两个日期时间的差 以*天**小时**分钟
- C#求两个日期间隔、两个DateTime之差
- 面试题之求两个日期之间的天数差
- JAVA小函数-计算日期差
- java 日期差 实现(×分钟前)功能
- Java得到两日期之间的差!
- Java 中计算两个日期差
- mysql 主从复制实现原理
- document.body和document.documentElement的区别
- Android中正则表达式使用
- hadoop远程调试
- NOT IN和NOT EIXTS的风险
- java 求日期差
- hdu 4927 Series 1 (大数模板加减乘除)
- 一、Linux/UNIX操作命令积累【cd、ls、su】
- C#字符串排序
- hdu 1541 stars (树状数组)
- Permission denied (maybe missing INTERNET permission) 错误解决
- windows下配置eclipse + Python + PyDev + tornado,并使用pylint进行静态检测
- 正则验证身份证 程序验证手机号码
- MySQL必知必会 19章后