2016-09-30 64 views
0

我試圖從兩個日曆的差異中獲得以秒爲單位的時間,並知道結果是否超過一天(86400secs)。問題是有時候我會得到很大的負面價值。計算兩個Java日曆之間的差異

private long calcValidityDuration(XMLGregorianCalendar greg, XMLGregorianCalendar gregStart) { 


     int minEnd = greg.getMinute(); 
     int minStart = gregStart.getMinute(); 
     int hourStart = gregStart.getHour(); 
     int hourEnd = greg.getHour(); 
     int dayEnd = greg.getDay(); 
     int dayStart = gregStart.getDay(); 
     int monthStart = gregStart.getMonth(); 
     int monthEnd = greg.getMonth(); 
     int yearStart = gregStart.getYear(); 
     int yearEnd = greg.getYear(); 

     Calendar cal = new GregorianCalendar(); 
     cal.set(yearEnd, monthEnd - 1, dayEnd, hourEnd, minEnd); 
     Calendar calStart = new GregorianCalendar(); 
     calStart.set(yearStart, monthStart - 1, dayStart, hourStart, minStart); 
     long toRet = (((cal.getTimeInMillis()) - (calStart.getTimeInMillis()))/1000); 
     if(toRet >= 86400){ 
      return 86400; 
     }else{ 
      return toRet; 
     } 
} 

這裏一些有問題的日期:

開始日期:30/09/16 07 結束日期:29/09/16 16

開始日期:29/09/16 16 結束日期:29/09/16 16

開始日期:30/09/16 08 結束日期:29/09/16 16

開始日期:29/09/16 16 結束日期:21/11/14 19

開始日期:29/09/16 16 結束日期:20/03/14 13

+1

您能否給我們,讓您的輸入的例子大的負面價值? –

+1

另外,我不知道這對你的用例是否有意義。但是當夏令時開始和結束時,您會得到不是86400秒的日子。 –

+0

請以我們可以運行它們的方式提供錯誤示例 - 並且已經運行它們(錯誤可能在那裏)。不要指望我們找到一種方法將這些日期輸入到算法中。 –

回答

1
public static long getDistanceDay(Calendar one,Calendar two) { 

    long time1 = one.getTimeMillis(); 
    long time2 = two.getTImeMillis(); 
    long time; 

    if(time1 > time2) { 
     time = time-time2; 
    } 
    else { 
     time = time2 - time1; 
    } 
    return time/(1000*60*60*24) 
}