JAVA 比較兩個日期相差的天數
阿新 • • 發佈:2019-02-18
在測試工作中經常會使用到比較兩個日期相差的天數,我之前用過實現這一功能的兩個版本的方法,原始碼如下:
版本一:
版本二: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; }
之所以會有兩個版本,是因為兩種方式的演算法不一樣,先來看下面這個例子:
這個例子中呼叫了兩個版本的方法,但輸出結果有時不相同,此前我一直不明白為什麼,後來細心研究了一下,原來是我對這兩個版本的方法沒有清楚的理解。版本1的方法要比較的嚴格意義上的天,舉個例子,計算今天與昨天比較相差幾天,我們或許都認為是1,但我們要輸入兩個日期型別的引數,這個日期中不僅包含天,還有小時,分等,版本1會根據您輸入的小時與分不同,返回不同的結果的,比如你輸入的引數今天中午與昨天晚上的兩個時間,它就會告訴你相差0天。同樣的輸入版本2只關心天,輸出的結果是1,也是我想要的結果。總結起來這兩個方法都是對的,關鍵的是呼叫者要明白你想要的究竟是什麼樣的結果。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)); }
轉載自:http://blog.csdn.net/shiyuezhong/article/details/9196803