Date 计算日期

http://linychuo.blog.sohu.com/93494556.html

问题分析:求日期差,重要的是时间对象的日期部分,与时分秒没有关系。所以问题的关键是过滤掉时分秒,保留日期部分。干的活象低通滤波器,滤掉高频杂波,保留低频信号。
解决思路:一天的秒数是24*60*60*1000=86400000=Senconds。时间对象date1.getTime()是自1970年1月1日零点以来的秒数,用它整除以Seconds
,就得到自1970年1月1日以来的天数。注意这里用的是整除符号,时分秒被过滤掉了。对date2也施行同样的操作,得到date2的天数。date2的天数减去date1的天数,所得结果就是日期差。
举例来说,用最简单的例子,假设date1等于1970年1月5日15点整,date2等于1970年1月6日14点整。date1整除以seconds的结果是4,date2整除以
seconds的结果是5,date2与date1相差5-4=1天,与我们的预期相符。

方法一(简洁有效,没有方法二精准到分秒):

public long differ(Date dnow,dold){

return dnow.getTime()/86400000 - dold.getTime()/86400000;

}

大牛的方法二:

原文连接:http://blog.youkuaiyun.com/rmartin/article/details/1452867

private int daysBetween(Date now, Date returnDate) {
    Calendar cNow = Calendar.getInstance();
    Calendar cReturnDate = Calendar.getInstance();
    cNow.setTime(now);
    cReturnDate.setTime(returnDate);
    setTimeToMidnight(cNow);
    setTimeToMidnight(cReturnDate);
    long todayMs = cNow.getTimeInMillis();
    long returnMs = cReturnDate.getTimeInMillis();
    long intervalMs = todayMs - returnMs;
    return millisecondsToDays(intervalMs);
  }


  private int millisecondsToDays(long intervalMs) {
    return (int) (intervalMs / (1000 * 86400));
  }


  private void setTimeToMidnight(Calendar calendar) {
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
  }

同事在网上找到的方法:

SimpleDateFormat myFormatter  =   new  SimpleDateFormat( " yyyy-MM-dd " );
java.util.Date date
=  myFormatter.parse( " 2003-05-1 " ); 
java.util.Date mydate
=  myFormatter.parse( " 1899-12-30 " );
long   day = (date.getTime() - mydate.getTime()) / ( 24 * 60 * 60 * 1000 );
out.println(day);


结果应该是正确的,它根本就没有时分秒,有了时分秒与Kun的方法等价。不过用起来会很麻烦,因为要先得到字符串的日期,才能用它。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值