2012-12-17 178 views
0

我需要幫助才能獲得兩個Java日期之間的期限。我使用JodaTime進行計算,但結果不正確。兩個Java日期之間的右期

開始:2012年11月11日12:00
結束:二○一二年十二月一十六日20:15
(德國時間標準)
結果musst是5周,0天,8小時和15分鐘。

我嘗試用

Period period = new Period(start.getTime(), end.getTime()); 
weeks = Weeks.weeksBetween(new DateTime(start), new DateTime(end)).getWeeks(); 
days = period.getDays(); 
hours = period.getHours(); 
minutes = period.getMinutes(); 

,並得到5瓦特5D 8H對不起!

編輯:
感謝您的幫助,但我想我使用JodaTime期錯。當然是5w 5d 8h 15m的輸出,但是我想要的更多是這樣的。

int days = Days.daysBetween(start, end); // musst be 35 days 
int weeks = (days - (days % 7))/7; 
days = days % 7; 

現在是我的結果5周和0天。對不起,感謝您的幫助。

+0

你會得到什麼輸出? –

+1

您可能需要'%7'作爲'天'。 –

+0

%7不會做任何事情,因爲5模7 = 5但感謝你的想法。 – Happo

回答

4
DateTime start = new DateTime(new Date(2012, 11, 11, 12, 00, 00)); 
    DateTime end = new DateTime(new Date(2012, 12, 16, 20, 15, 00)); 
    Period period = new Period(start, end); 
    System.out.println("Weeks: " + Weeks.weeksBetween(new DateTime(start), new DateTime(end)).getWeeks()); 
    System.out.println("Days: " + period.getDays()); 
    System.out.println("Hours: " + period.getHours()); 
    System.out.println("Minutes: " + period.getMinutes()); 

輸出

Weeks: 5 
    Days: 5 
    Hours: 8 
    Minutes: 15 

的作品就像一個魅力的
代替Weeks.weeksBetween你可以使用一個解決方案(使用PeriodType

PeriodType periodType = PeriodType.standard().withMonthsRemoved(); 
Period period = new Period(new Date(2012, 11, 11, 12, 00, 00).getTime(), new Date(2012, 12, 16, 20, 15, 00).getTime(), periodType); 
System.out.println(period.getWeeks()); 

輸出

5 
+0

對不起,我刪除了我以前的評論。你只是沒有顯示月份字段。但是你目前的做法不太正確。 11/11會增加5週會讓你在16/12,然後再增加5天讓你在21/12 – bowmore

+0

很酷,你應該在你的原始片段中使用PeriodType方法,而且你不再需要Weeks了,併產生所需的輸出。 – bowmore

0

對於要輸出的,我相信這是解決方案:

DateTime start = new DateTime(2012, 11, 11, 12, 0); 
    DateTime end = new DateTime(2012, 12, 16, 20, 15); 

    Weeks weeks = Weeks.weeksBetween(start, end); 
    Period period = new Period(start.plus(weeks), end); 
    System.out.println("Weeks : " + weeks.getWeeks()); 
    System.out.println("Days : " + period.getDays()); 
    System.out.println("Hours : " + period.getHours()); 
    System.out.println("Minutes : " + period.getMinutes()); 

一期將算一個月,而不是5周。所以我們首先計算兩個日期之間的星期,剩下的則用一個Period。

相關問題