java两个日期之间的时间,两个Java日期之间的正确时间段

这篇博客讨论了如何使用JodaTime库在Java中正确计算两个日期之间的周期。作者最初的方法得到了不准确的结果,然后通过调整代码,特别是使用`PeriodType`去除月份,最终得到了正确的5周周期。解决方案包括了对日期时间的转换和使用`PeriodType`来确保计算只包含所需的天数、小时数和分钟数。
摘要由CSDN通过智能技术生成

I need help to get the Period between two Java Dates. I use JodaTime for the calculation but the result isn't correct.

Start: 11.11.2012 12:00

End: 16.12.2012 20:15

(German time standard)

Result musst be 5 weeks, 0 days, 8 hours and 15 minutes.

I try it with

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();

and got 5w 5d 8h 15m.

EDIT:

Thanks for the help but i think i use the JodaTime Period wrong. Off course is the output of 5w 5d 8h 15m right but what i want is more like this.

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

int weeks = ( days - ( days % 7 ) ) / 7;

days = days % 7;

Now is my result 5 weeks and 0 days. Sorry for the confusion and thanks for the help.

解决方案

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());

output is

Weeks: 5

Days: 5

Hours: 8

Minutes: 15

works like a charm

instead of Weeks.weeksBetween you can use next solution (using 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());

output is

5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值