gpt4 book ai didi

java - 用Java获取两个工作日之间的分钟数

转载 作者:行者123 更新时间:2023-12-01 22:24:52 25 4
gpt4 key购买 nike

我正在尝试计算 Java 中两个 Joda DateTimes 或日历之间的分钟数。当然,如果我可以使用 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 - 用Java获取两个工作日之间的分钟数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28995301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com