到期时间应在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);
1条答案
按热度按时间pkln4tw61#
当然还有更优雅的解决方案,但这可能是一个。我还在午餐时间(12点到13点)添加了一个休息时间,所以如果开始时间是12:30,结束时间将是13:30(午餐时间=没有使用)。
公共静态void main(String []参数){
例如:
输入日期:2023年1月5日15:32
输出时间:2023年1月6日16:32
输入日期:2023年1月6日08:37
输出时间:2023年1月9日09:37