2015-06-26 223 views
-2

我有四個日期,我想計算日期之間的日差。我的程序如下。計算差異時的輸出錯誤

Date d1 = new Date("11/28/14 23:59:58"); 
    Date d2 = new Date("11/29/14 00:00:02"); 
    Date d3 = new Date("11/29/14 23:59:58"); 
    Date d4 = new Date("11/30/14 00:00:02"); 

    final long DAY_IN_MILLIS = 1000 * 60 * 60 * 24; 

    int diff1 = (int) ((d2.getTime()- d1.getTime())/DAY_IN_MILLIS); 
    int diff2 = (int) ((d3.getTime()- d1.getTime())/DAY_IN_MILLIS); 
    int diff3 = (int) ((d4.getTime()- d1.getTime())/DAY_IN_MILLIS); 



    System.out.println(diff1); 
    System.out.println(diff2); 
    System.out.println(diff3); 

欲DIFF1 = 1,DIFF2 = 1 &的diff3 = 2。我的輸出爲diff1 = 0,diff2 = 1,diff2 = 1

+2

'日期(字符串)'已過時,只是順便說一句。 – ceekay

+0

比較這樣的日期也是一個非常糟糕的主意。 – Kayaman

+0

可能重複的[Java,計算兩個日期之間的天數](http://stackoverflow.com/questions/7103064/java-calculate-the-number-of-days-between-two-dates) –

回答

1

d2和d1之間有4秒不同,因此0天對於diff1有意義。

在d3和d1之間恰好有1天,這就是你在diff2中得到的結果。

在d4和d1之間有一天多一點(1天和4秒),所以在使用int除法時,在diff3中有意義。

爲了更清楚,使用浮點除法時這裏的結果:

4.6296296296296294E-5 
1.0 
1.0000462962962964 
+0

謝謝伊蘭....但根據我的要求是,只要有日期變化,它應該即使差異是1秒,也會給我差異。 所以請指導我如何做到這一點。 – ChandraBhan

+0

@ChandraBhan如果兩個日期都是同一天(例如d3和d2),該怎麼辦?你期望得到0還是1? – Eran

+0

如果兩個日期相同,那麼我會預計爲0. – ChandraBhan

1

它只有4 D2和D1之間秒性差異。因此,它們之間的完整天數是0,而不是1,因爲您認爲差異被視爲2個時間戳之間的差異。 我強烈建議您使用Joda Time,這是比日期更簡單的API。然後,您可以使用:

int days = Days.daysBetween(d2, d1).getDays(); 
+0

謝謝!但根據我的要求,即使兩個日期之間存在1秒的差異,也應該返回1. 它就像d1是星期一,而d2是星期二......所以差異應該返回1. – ChandraBhan

+0

然後使用時間戳: )祝你好運 – aviad

2

爲此,可以使用現代的Java 8時API解決:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yy HH:mm:ss"); 
LocalDate d1 = LocalDate.parse("11/28/14 23:59:58", formatter); 
LocalDate d2 = LocalDate.parse("11/29/14 00:00:02", formatter); 
LocalDate d3 = LocalDate.parse("11/29/14 23:59:58", formatter); 
LocalDate d4 = LocalDate.parse("11/30/14 00:00:02", formatter); 
int diff1 = d1.until(d2).getDays(); 
int diff2 = d1.until(d3).getDays(); 
int diff3 = d1.until(d4).getDays(); 
System.out.println(diff1); 
System.out.println(diff2); 
System.out.println(diff3); 
+0

如果我正在安裝Java 7。那麼在那種情況下,它會起作用嗎? – ChandraBhan

+1

沒有。如果您不能使用Java 8,請考慮使用Joda Time API,如@aviad所示。 –