2014-07-21 44 views
0

我正在嘗試編寫函數來查找兩個日期之間的日期差異,但它的工作正常,但結果在相同的輸入中改變了一些時間。讓我們說當前日期是21/7/2014某個時間的結果是567和其他時間566尋找天的代碼區別

代碼:

//TO GET THE CURRENT DATE 
    Calendar cal = Calendar.getInstance(); 
    //THE CAL.ADD BECUSE THE 1ST MONTH IN THE YEAR IS 0 NOT 1 
    cal.add(Calendar.MONTH, 1); 

    //TO SET THE START DATE WICH IS 1/1/2013 
    Calendar startDate=Calendar.getInstance(); 
    startDate.set(Calendar.DAY_OF_MONTH, 1); 
    startDate.set(Calendar.MONTH,1); 
    startDate.set(Calendar.YEAR, 2013); 

    //TO FIND THE DIFF BETWEEN THE START DATE AND CUREENT DATE , THE +1 BECUSE IT IS   
    ALWAYS LESS BY ONE DAY 
    long diff=(((cal.getTimeInMillis()- 
    startDate.getTimeInMillis())/(1000*60*60*24))+1); 
+1

http://可能有重複stackoverflow.com/questions/1555262/calculating-the-difference-between-two-java-date-instances他們確定使用喬達時間是處理這個問題的最好方法。但是,這個解決方案可以代替使用Joda時間庫:http://stackoverflow.com/a/10650881/1778273 –

回答

0

我想這是因爲,在陌生的方式繞過小時..

在我身邊時,我添加以下代碼似乎工作正常:

cal.set(Calendar.HOUR_OF_DAY, 1); 
startDate.set(Calendar.HOUR_OF_DAY, 1); 
+0

想你的重播,我試了一下,但沒有解決問題。 – user3849607

0

這裏的問題是當你實例化一個日曆時,你正在獲取當前的日期和時間。所以當你忽略時間值的時候,它完美的工作。

兩個比較兩個日期,最好使用Date類和Java和使用下面的代碼 所以你上面的代碼可以改寫爲

Date cal = new Date(114, 7, 21); //Date is 21/7/2014 
Date startDate = new Date(113, 1, 1); Date is 1/1/2013 
long newdiff = ((cal.getTime()-startDate.getTime())/(1000*60*60*24)); 
System.out.println(newdiff); 

這一次,它會正確打印566(在實際工作中的區別是566 )

問題的確是假設你在比較今天的日期和明天的日期。

即21/7/2014和22/7/2014。天的差別是一個。如果您在午夜12點運行該程序,您將得到1,在此之後的任何其他時間,結果將爲0.這是因爲獲取當前時間以及日期

+0

認爲,我嘗試了但我得到錯誤「構造函數Date(int,int,int)已被棄用 – user3849607

+0

實際上,這只是一個警告,顯示代碼是舊的..日曆類來取代日期,但爲了你的目的,它是更好地使用日期類,因爲它更簡單易用 –

+0

認爲你的命中有用,我使用了GregorianCalendar,現在它工作正常,認爲你的時間 – user3849607