breeze5942
6 小时 10 分钟前
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Duration;
public class TaskDelegateService {
private static final LocalTime WORK_START_TIME = LocalTime.of(9, 0); // 上班时间 9:00
private static final LocalTime WORK_END_TIME = LocalTime.of(18, 0); // 下班时间 18:00
private static final Duration MAX_DELEGATE_DURATION = Duration.ofHours(3); // 3 小时倒计时
// 模拟记录用户操作的时间和倒计时剩余时间
private LocalDateTime taskCreatedTime;
private Duration remainingTime;
public TaskDelegateService(LocalDateTime taskCreatedTime) {
this.taskCreatedTime = taskCreatedTime;
this.remainingTime = MAX_DELEGATE_DURATION; // 初始化为 3 小时倒计时
}
// 判断是否在上班时间
private boolean isWithinWorkHours(LocalDateTime dateTime) {
LocalTime time = dateTime.toLocalTime();
return !time.isBefore(WORK_START_TIME) && !time.isAfter(WORK_END_TIME);
}
// 计算倒计时剩余时间
public void calculateRemainingTime(LocalDateTime currentTime) {
// 如果任务创建时间在上班时间内,开始倒计时
if (isWithinWorkHours(taskCreatedTime)) {
if (isWithinWorkHours(currentTime)) {
// 两个时间都在上班时间内,计算经过的时间
Duration elapsedTime = Duration.between(taskCreatedTime, currentTime);
remainingTime = remainingTime.minus(elapsedTime);
} else {
// 如果当前时间超过了下班时间,暂停倒计时,不减少 remainingTime
Duration elapsedWorkTime = Duration.between(taskCreatedTime.toLocalTime(), WORK_END_TIME);
remainingTime = remainingTime.minus(elapsedWorkTime); // 只减去上班时间内的时间
}
}
}
// 获取当前的倒计时状态
public Duration getRemainingTime(LocalDateTime currentTime) {
calculateRemainingTime(currentTime);
return remainingTime;
}
public boolean canDelegate(LocalDateTime currentTime) {
calculateRemainingTime(currentTime);
return !remainingTime.isNegative() && !remainingTime.isZero();
}
public static void main(String[] args) {
// 模拟用户在下午 4 点创建了一条任务
LocalDateTime taskCreatedTime = LocalDateTime.of(2024, 10, 17, 16, 0);
TaskDelegateService delegateService = new TaskDelegateService(taskCreatedTime);
// 模拟次日上午 10 点查询倒计时剩余时间
LocalDateTime currentTime = LocalDateTime.of(2024, 10, 18, 10, 0);
Duration remaining = delegateService.getRemainingTime(currentTime);
System.out.println("剩余的委托时间: " + remaining.toMinutes() + " 分钟");
System.out.println("是否还可以委托: " + delegateService.canDelegate(currentTime));
}
}
把你的需求直接复制给了 GPT...