2017-02-13 65 views
0

我正在使用java代碼來查找天差異。日期兩者之間讓說'12/27/16' 和'01/01/17'沒有開始正確的天差異在不同年份的兩個日期

代碼是:

SimpleDateFormat format = new SimpleDateFormat("mm/dd/yy"); 

Date d1= format.parse("12/27/16"); 
Date d2=format.parse("01/01/17"); 

long diff = d1.getTime()-d2.getTime(); 
long diffDays= diff/(24*60*60*1000); 

但是當我打印diffDays然後我得到352天而6天

+0

您想根據'd2.getTime() - d1.getTime()'計算差值,而不是相反。 – nbokmans

+0

@nbokmans只要得到正確的結果,我都可以。 – Bugasur

回答

2

如果打印d1,你會看到:

Wed Jan 27 00:12:00 CET 2016 

這絕對不是你放什麼原因是你的格式字符串是錯誤的:m表示分鐘,而不是一個月。正確的格式是"M/d/y"

而且,正如@nbokmans已經指出的那樣,d1 - d2倒退,應該是。請參閱documentation for SimpleDateFormat

+0

哦,非常感謝。有效。剛換上大寫字母M – Bugasur

1

正如@Thomas和@nbokmans回答,日期是錯誤的方式(但可以輕鬆更改代碼以忽略此)。但是,Java有很多方便的類來處理未知的時間和日期。我將用下列值之一替換顯式計算:

SimpleDateFormat format = new SimpleDateFormat("MM/dd/yy"); 

    Date d1 = format.parse("12/27/16"); 
    Date d2 = format.parse("01/01/17"); 

    long days1 = TimeUnit.MILLISECONDS.toDays(d2.getTime() - d1.getTime()); 
    long days2 = Duration.between(d1.toInstant(), d2.toInstant()).abs().toDays(); 
    long days3 = ChronoUnit.DAYS.between(d1.toInstant(), d2.toInstant()); 
相關問題