2017-08-11 58 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.