java 获取三个工作日,在Java中用两个工作日获得分钟

这篇博客讨论了如何在Java中计算两个日期之间的工作时间分钟数,即仅考虑工作日和8:00到18:00的时间段。作者提供了一个解决方案,通过检查日期是否为工作日、调整时间到工作日的开始和结束,并计算跨越的完整工作日及部分工作日的分钟数来实现。
摘要由CSDN通过智能技术生成

我试图计算Java中两个Joda DateTimes或Calendars之间的分钟数.

当然,如果我可以使用Minutes.minutesBetween函数,这将很简单,但我只计算工作日和上午8:00 – 下午6:00之间的分钟数.

例如.:

Startdate: 03-11-2015 16:00

Enddate: 03-11-2015 17:00

这很简单,因为它恰好是60分钟.因为这是工作日和给定的工作时间之间.

现在我想要计算的是:

Startdate: 03-11-2015 17:00

Enddate: 03-12-2015 09:00

这应该返回120分钟,即使之间有更多的分钟,因为两个日期之间只有两个工作小时.

有时在两个日期之间也有一个周末,也不应该添加那些会议记录.

我一直在努力实现这一点,但我还没有找到解决方案.

有任何想法吗?

提前致谢.

编辑:

感谢Davis Broda的伪代码,我找到了一个解决方案:

private static int BEGINWORKHOUR = 8;

private static int ENDWORKHOUR = 16;

public int getWorkedMinutes(){

Calendar start = (Calendar) this.startTime.clone();

Calendar end = (Calendar) this.endTime.clone();

if(start.get(Calendar.HOUR_OF_DAY) < BEGINWORKHOUR){

start.set(Calendar.HOUR_OF_DAY, BEGINWORKHOUR);

start.set(Calendar.MINUTE, 0);

}

if(end.get(Calendar.HOUR_OF_DAY) >= ENDWORKHOUR){

end.set(Calendar.HOUR_OF_DAY, ENDWORKHOUR);

end.set(Calendar.MINUTE, 0);

}

int workedMins = 0;

while(!sameDay(start, end)){

workedMins += workedMinsDay(start);

start.add(Calendar.DAY_OF_MONTH, 1);

start.set(Calendar.HOUR_OF_DAY, BEGINWORKHOUR);

start.set(Calendar.MINUTE, 0);

}

workedMins += (end.get(Calendar.MINUTE) - start.get(Calendar.MINUTE)) + ((end.get(Calendar.HOUR_OF_DAY) - start.get(Calendar.HOUR_OF_DAY))*60);

return workedMins;

}

private int workedMinsDay(Calendar start){

if((start.get(Calendar.DAY_OF_WEEK) == 1) || (start.get(Calendar.DAY_OF_WEEK) == 6)) return 0;

else return (60 - start.get(Calendar.MINUTE)) + ((ENDWORKHOUR - start.get(Calendar.HOUR_OF_DAY) - 1)*60);

}

private boolean sameDay(Calendar start, Calendar end){

if(start.get(Calendar.YEAR) == end.get(Calendar.YEAR) && start.get(Calendar.MONTH) == end.get(Calendar.MONTH) &&

start.get(Calendar.DAY_OF_MONTH) == end.get(Calendar.DAY_OF_MONTH)) return true;

else return false;

}

解决方法:

伪代码解决方案可能类似于下面的内容.

onSameWorkDay?

if yes

simple date comparison

if no

days = find number of whole work days between the two dates

dayToMin = days * 8 * 60

minDay1 = find minutes between specified start time and end of day1

minDay2 = find minutes between start of final day and specified end time

totalTime = dayToMin + minDay1 + minDay2

标签:java,datetime,jodatime

来源: https://codeday.me/bug/20191003/1849061.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值