2017-08-11 62 views
1

Joda是必須的,因爲Java SE8在此環境中不可用。將兩個LocalTime對象轉換爲Duration對象

如何查找兩個LocalTime對象之間的小時差異,以Duration的形式存儲?嘗試以下沒有運氣:

LocalTime startTime = new LocalTime(8, 0); 
LocalTime endTime = new LocalTime(16, 0); 

Period shiftDuration = new Period(0, 
endTime.getHourOfDay() - startTime.getHourOfDay(), 0, 0); 

System.out.println(shiftDuration.getHours()); // expected 8, get 0. 

回答

1

如果你想的那些2個LocalTime實例小時之間具體的數目,你可以使用org.joda.time.Hours類:

LocalTime startTime = new LocalTime(8, 0); 
LocalTime endTime = new LocalTime(16, 0); 

int hours = Hours.hoursBetween(startTime, endTime).getHours(); 

的結果將是8

你也可以使用一個org.joda.time.Period

Period period = new Period(startTime, endTime); 
System.out.println(period.getHours()); // 8 

結果也8

它們之間的差異是Hours舍入值,但Period沒有。例如:

// difference between 08:00 and 16:30 
LocalTime startTime = new LocalTime(8, 0); 
LocalTime endTime = new LocalTime(16, 30); 

Period period = new Period(startTime, endTime); 
System.out.println(period); // PT8H30M 
System.out.println(period.getHours()); // 8 
System.out.println(period.getMinutes()); // 30 

int hours = Hours.hoursBetween(startTime, endTime).getHours(); 
System.out.println(hours); // 8 

雖然Period保持所有字段(8小時和30分鐘),則需要Hours只關心小時和丟棄的其他字段。

+2

非常豐富,你實際上回答了我昨天也遇到的一個小問題。非常感謝您分享您的專業知識! –

+0

不客氣,很高興幫助! – 2017-08-11 16:52:12

1

您提供了錯誤參數中的值。試試這個:

LocalTime startTime = new LocalTime(8, 0); 
    LocalTime endTime = new LocalTime(16, 0); 

    Period shiftDuration = new Period(endTime.getHourOfDay() - startTime.getHourOfDay(), 0, 0, 0); 

    System.out.println(shiftDuration.getHours()); 

根據JODA documentation

Period(int hours, int minutes, int seconds, int millis) 
      Create a period from a set of field values using the standard set of fields.