2016-11-26 75 views
2

其實我陷入了小問題,但沒有得到任何合適的解決方案。我有相同的格式兩個日期現在我想差別之間,但格式會(年 - 月 - 日 - 小時 - 薄荷糖 - 秒)這裏是我的代碼月,日的差異

public static void getDifferent(Date startDate, Date endDate) { 

     //milliseconds 
     long different = endDate.getTime() - startDate.getTime(); 


     System.out.println("startDate : " + startDate); 
     System.out.println("endDate : " + endDate); 
     System.out.println("different : " + different); 

     long secondsInMilli = 1000; 
     long minutesInMilli = secondsInMilli * 60; 
     long hoursInMilli = minutesInMilli * 60; 
     long daysInMilli = hoursInMilli * 24; 
     long monthInMili = daysInMilli * 30; 

     long elapsedMonths = different/monthInMili; 

     long elapsedDays = different/daysInMilli; 
     different = different % daysInMilli; 

     long elapsedHours = different/hoursInMilli; 
     different = different % hoursInMilli; 

     long elapsedMinutes = different/minutesInMilli; 
     different = different % minutesInMilli; 

     long elapsedSeconds = different/secondsInMilli; 

     Log.d("Difference", "startDate: " + startDate.toString() + " endDate: " + endDate + " Months : " + elapsedMonths + " Days :" + elapsedDays + " Hours :" + 
       elapsedHours + " Mint :" + elapsedMinutes + " Seconds :" + elapsedSeconds); 


    } 

這是代碼不夠完善,由於這條線

long monthInMili = daysInMilli * 30; 

所以請指導我。我很久沒有得到妥善的解決方案。

回答

2

編輯:要得到個區別,你可以使用日曆類。否則,使用JodaTime庫(鏈接在答案的底部)。

Calendar startCalendar = new GregorianCalendar(); 
startCalendar.setTime(startDate); 
Calendar endCalendar = new GregorianCalendar(); 
endCalendar.setTime(endDate); 

int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); 
int diffMonth = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH); 
int diffDay = endCalendar.get(Calendar.DAY_OF_MONTH) - startCalendar.get(Calendar.DAY_OF_MONTH); 

請注意,如果您的日期是2013年1月31日和2013年2月1日,你試用1個月這種方式,可能會或可能不是你想要的是一個距離。要更正此問題,請參閱this answer

編輯之前

根據您的需要

// Start Date : 01/14/2012 09:29:58 
// End Date : 01/15/2012 10:31:48 

public static void getDifference(Date d1, Date d2){ 

    // HH converts hour in 24 hours format (0-23), day calculation 
    // must match with your date format 
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); 

    try { 

     //in milliseconds 
     long diff = d2.getTime() - d1.getTime(); 

     long diffSeconds = diff/1000 % 60; 
     long diffMinutes = diff/(60 * 1000) % 60; 
     long diffHours = diff/(60 * 60 * 1000) % 24; 
     long diffDays = diff/(24 * 60 * 60 * 1000); 

     System.out.print(diffDays + " days, "); 
     System.out.print(diffHours + " hours, "); 
     System.out.print(diffMinutes + " minutes, "); 
     System.out.print(diffSeconds + " seconds."); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

您還可以使用joda-time-library並依照本tutorial's second step實現它只是減去日期,並計算毫秒。

+0

的情況下,開始日期假設= 2012年1月14日9時29分58秒和結束日期= 2011年1月5日09:29: 58。現在在這種情況下,我得到了一些很大的天價值?我想在0-30的範圍內。並希望額外的領域像12個月3天1小時1分鐘1秒我想這樣。 –

+0

檢查更新的答案。 – rupinderjeet

+0

我覺得你靠近我的答案,但不是完美的。當我把開始日期和結束日期的差異確切地說是1年,那麼你的功能會給我1年和12個月。我想要完美的1年零個月。 –

1

你必須這樣寫代碼

long different = todayDate.getTime() - meetingDate.getTime(); 

    long secondsInMilli = 1000; 
    long minutesInMilli = secondsInMilli * 60; 
    long hoursInMilli = minutesInMilli * 60; 
    long daysInMilli = hoursInMilli * 24; 
    long mothsInMilli = daysInMilli * 30; 
    long yearInMilli = mothsInMilli * 12; 

    long elapsedYear = different/yearInMilli; 
    different = different % yearInMilli; 
    System.out.println("--------- elapsedYear : " + elapsedYear); 

    long elapsedMonths = different/mothsInMilli; 
    different = different % mothsInMilli; 
    System.out.println("--------- elapsedMonths : " + elapsedMonths); 

    long elapsedDays = different/daysInMilli; 
    different = different % daysInMilli; 
    System.out.println("--------- elapsedDays : " + elapsedDays); 

    long elapsedHours = different/hoursInMilli; 
    different = different % hoursInMilli; 
    System.out.println("--------- elapsedHours : " + elapsedHours); 

    long elapsedMinutes = different/minutesInMilli; 
    different = different % minutesInMilli; 
    System.out.println("--------- elapsedMinutes : " + elapsedMinutes); 

    long elapsedSeconds = different/secondsInMilli; 
    System.out.println("--------- elapsedSeconds : " + elapsedSeconds); 
+0

每個月都沒有30天。有幾個月也有28和31天。在這種情況下,上面的代碼不會準確計算差異。 – rupinderjeet

+0

我知道,但在這種情況下,我們有不同的只有毫秒。 所以只有毫秒數,我們不能指定幾個月的幾天,所以我們必須猜測每個月有30天。 –