我需要帮助才能获得两个Java日期之间的时间段。我使用JodaTime进行计算,但结果不正确。
开始时间:11.11.2012 12:00
结束日:2012年12月16日20:15
(德国时间标准)
结果为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();
得到5w 5d 8h 15m。
修改
感谢您的帮助,但我认为我使用了JodaTime Period错误。当然是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 :(得分: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
答案 1 :(得分: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());
一个时段将计算一个月而不是五周。因此,我们首先计算两个日期之间的周数,并使用句点表示余数。