将两个LocalTime对象转换为Duration对象
问题描述:
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.
答
如果你想的那些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
只关心小时和丢弃的其他字段。
答
您提供了错误参数中的值。试试这个:
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());
Period(int hours, int minutes, int seconds, int millis)
Create a period from a set of field values using the standard set of fields.
非常丰富,你实际上回答了我昨天也遇到的一个小问题。非常感谢您分享您的专业知识! –
不客气,很高兴帮助! – 2017-08-11 16:52:12