java 1.传入时间段列表(格式为hh:mm-hh:mm;hh:mm-hh:mm)2.传入日期时间 请计算给定分钟后的日期时间 只考虑工作时段
时间: 2023-09-09 13:07:54 浏览: 48
以下是Java的示例代码,实现了传入时间段列表和日期时间,并计算给定分钟后的日期时间,只考虑工作时段:
```java
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.ArrayList;
public class WorkHourCalculator {
public static void main(String[] args) {
String timeRanges = "09:00-12:00;13:00-18:00"; // 时间段列表,格式为hh:mm-hh:mm;hh:mm-hh:mm
LocalDateTime dateTime = LocalDateTime.of(2021, 10, 1, 10, 0); // 传入日期时间
int minutesToAdd = 120; // 给定分钟数
List<WorkHour> workHours = parseTimeRanges(timeRanges); // 解析时间段列表
LocalDateTime result = calculateWorkHour(dateTime, minutesToAdd, workHours); // 计算工作时段后的日期时间
System.out.println(result.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
static List<WorkHour> parseTimeRanges(String timeRanges) {
List<WorkHour> workHours = new ArrayList<>();
String[] ranges = timeRanges.split(";");
for (String range : ranges) {
String[] parts = range.split("-");
LocalTime start = LocalTime.parse(parts[0], DateTimeFormatter.ofPattern("HH:mm"));
LocalTime end = LocalTime.parse(parts[1], DateTimeFormatter.ofPattern("HH:mm"));
workHours.add(new WorkHour(start, end));
}
return workHours;
}
static LocalDateTime calculateWorkHour(LocalDateTime dateTime, int minutesToAdd, List<WorkHour> workHours) {
int remainingMinutes = minutesToAdd;
while (remainingMinutes > 0) {
dateTime = dateTime.plusMinutes(1);
LocalTime time = dateTime.toLocalTime();
for (WorkHour workHour : workHours) {
if (workHour.contains(time)) {
remainingMinutes--;
break;
}
}
}
return dateTime;
}
}
class WorkHour {
LocalTime start;
LocalTime end;
WorkHour(LocalTime start, LocalTime end) {
this.start = start;
this.end = end;
}
boolean contains(LocalTime time) {
return !time.isBefore(start) && !time.isAfter(end);
}
}
```
代码解释:
- `parseTimeRanges` 方法将时间段列表字符串解析为一个 `WorkHour` 对象列表,其中 `WorkHour` 表示一个工作时段,包含开始时间和结束时间。
- `calculateWorkHour` 方法计算给定分钟数后的日期时间,只考虑工作时段,每次增加一分钟,判断该分钟是否在任何一个工作时段内,如果是则剩余分钟数减一,直到剩余分钟数为零,返回计算后的日期时间。
示例输出:
```
2021-10-01 12:00:00
```
假设传入的日期时间为 2021年10月1日10点,给定的分钟数为 120 分钟,即两个小时,工作时段为 9点到12点,下午1点到6点,那么经过两个小时后的日期时间应该是 2021年10月1日12点,因为这个时间点正好是工作时段结束时间。