计算工作时间和工作日的到期时间java

jyztefdp  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(243)

到期时间应在8个工作小时后(UTC周一至周五上午8点至下午5点),例如创建日期为UTC时间下午7点,到期时间应从UTC时间次日上午8点至下午5点开始计算并到期。因此,它应在UTC时间下午4点到期。
另一个例子,如果广播发生在下午4时SA时间,那么到期应计为1小时,从今天和7小时,从第二天(上午8时至下午5时的时间),所以它应在下午3时SA时间到期。我已经尝试了这个解决方案,但不工作,有人能请帮助我吗

int workHourStartUtc = 6;
int workHourEndUtc = 15;
int expiryWindow = 8;
int currentHourUtc = LocalDateTime.now(ZoneOffset.UTC).getHour();
int hourCompletedToday = currentHourUtc - workHourStartUtc;
int offHours = LocalDate.now().getDayOfWeek() == 1 ? 72 : 24;
LocalDateTime yesterdayWorkEndUtc = LocalDateTime.now(ZoneOffset.UTC).toLocalDate().atTime(workHourEndUtc, 0).minusHours(offHours);
LocalDateTime expireDateBefore = hourCompletedToday >= expiryWindow ? LocalDateTime.now(ZoneOffset.UTC).minusHours(expiryWindow): yesterdayWorkEndUtc.minusHours(expiryWindow - hourCompletedToday);
pkln4tw6

pkln4tw61#

当然还有更优雅的解决方案,但这可能是一个。我还在午餐时间(12点到13点)添加了一个休息时间,所以如果开始时间是12:30,结束时间将是13:30(午餐时间=没有使用)。
公共静态void main(String []参数){

final int START_OF_DAY = 8;
final int END_OF_DAY = 17;
final int WORKING_HOURS = 8;
final int LUNCH = 1;
LocalDateTime endDateTime = LocalDateTime.now(ZoneOffset.UTC);
int startTime = endDateTime.getHour();
int startDay = endDateTime.getDayOfWeek().getValue();
int endTime = 0;
int startTimeEndDay = 0;

System.out.println("Start-Datetime: " + endDateTime);

if (startTime > START_OF_DAY && startTime <= 12) {
    startTimeEndDay = (END_OF_DAY - startTime - LUNCH);
} else if (startTime >= 13 && startTime <= END_OF_DAY) {
    startTimeEndDay = END_OF_DAY - startTime;
}

endTime = START_OF_DAY + (WORKING_HOURS - startTimeEndDay);
if (startTimeEndDay == 4) {
    endTime += LUNCH;
}

endDateTime = endDateTime.withHour(endTime);

if (startTime != START_OF_DAY) {
    if (startDay != 5) {
        endDateTime = endDateTime.plusDays(1);
    } else {
        endDateTime = endDateTime.plusDays(3);
    }
}     

System.out.println("Expiry-Datetime: " + endDateTime);

}

例如:
输入日期:2023年1月5日15:32
输出时间:2023年1月6日16:32
输入日期:2023年1月6日08:37
输出时间:2023年1月9日09:37

相关问题