1. 程式人生 > >JAVA 比較兩個日期相差的天數

JAVA 比較兩個日期相差的天數

在測試工作中經常會使用到比較兩個日期相差的天數,我之前用過實現這一功能的兩個版本的方法,原始碼如下:

版本一:

public static int getIntervalDays(Date fDate, Date oDate) {
       if (null == fDate || null == oDate) {
           return -1;
       }
       long intervalMilli = oDate.getTime() - fDate.getTime();
       return (int) (intervalMilli / (24 * 60 * 60 * 1000));
    }
版本二:
public static int daysOfTwo(Date fDate, Date oDate) {
       Calendar aCalendar = Calendar.getInstance();
       aCalendar.setTime(fDate);
       int day1 = aCalendar.get(Calendar.DAY_OF_YEAR);
       aCalendar.setTime(oDate);
       int day2 = aCalendar.get(Calendar.DAY_OF_YEAR);
       return day2 - day1;
    }

之所以會有兩個版本,是因為兩種方式的演算法不一樣,先來看下面這個例子:
public static void main(String[] args) {
       Date fDate = new GregorianCalendar().getTime();
       Date oDate = new GregorianCalendar(2009, 2, 15,13,13,0).getTime();
       System.out.println("使用 getIntervalDays 相差天數 = "
                     + getIntervalDays(fDate, oDate));
       System.out.println("使用 daysOfTwo 相差天數 = "
              + daysOfTwo(fDate, oDate));
}
這個例子中呼叫了兩個版本的方法,但輸出結果有時不相同,此前我一直不明白為什麼,後來細心研究了一下,原來是我對這兩個版本的方法沒有清楚的理解。版本1的方法要比較的嚴格意義上的天,舉個例子,計算今天與昨天比較相差幾天,我們或許都認為是1,但我們要輸入兩個日期型別的引數,這個日期中不僅包含天,還有小時,分等,版本1會根據您輸入的小時與分不同,返回不同的結果的,比如你輸入的引數今天中午與昨天晚上的兩個時間,它就會告訴你相差0天。同樣的輸入版本2只關心天,輸出的結果是1,也是我想要的結果。總結起來這兩個方法都是對的,關鍵的是呼叫者要明白你想要的究竟是什麼樣的結果。

轉載自:http://blog.csdn.net/shiyuezhong/article/details/9196803