JAVA 需求背景 1.传入工作时间段为字符串(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm)如"13:00-14:00;16:00-18:00" 2.传入剩余可用工作时间段为字符串(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm)如"13:58-14:00;16:00-16:02" 3.判断步骤2中可用工作时段是否有相邻两个时段第一个时间结束时间和第二个时段的开始时间在工作时段某两相邻的时段中一致 如2中14:00和1中14:00 2中16:00和1中16:00
时间: 2024-01-08 22:04:33 浏览: 74
以下是一个Java程序,用于判断剩余可用工作时间段是否与工作时间段有重叠部分:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Main {
public static void main(String[] args) throws ParseException {
String workTime = "13:00-14:00;16:00-18:00";
String availableTime = "13:58-14:00;16:00-16:02";
boolean overlap = isOverlap(workTime, availableTime);
System.out.println("是否有重叠部分:" + overlap);
}
/**
* 判断剩余可用工作时间段是否与工作时间段有重叠部分
* @param workTime 工作时间段字符串
* @param availableTime 剩余可用工作时间段字符串
* @return 是否有重叠部分
* @throws ParseException
*/
public static boolean isOverlap(String workTime, String availableTime) throws ParseException {
// 将时间段字符串转换为时间段列表
List<TimeRange> workTimeRanges = parseTimeRanges(workTime);
List<TimeRange> availableTimeRanges = parseTimeRanges(availableTime);
// 判断是否有重叠部分
for (TimeRange availableTimeRange : availableTimeRanges) {
for (TimeRange workTimeRange : workTimeRanges) {
if (availableTimeRange.isOverlap(workTimeRange)) {
return true;
}
}
}
return false;
}
/**
* 将时间段字符串解析成时间段列表
* @param timeString 时间段字符串
* @return 时间段列表
* @throws ParseException
*/
public static List<TimeRange> parseTimeRanges(String timeString) throws ParseException {
List<TimeRange> timeRanges = new ArrayList<>();
String[] timeStrings = timeString.split(";");
for (String ts : timeStrings) {
String[] startAndEnd = ts.split("-");
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date startTime = format.parse(startAndEnd[0]);
Date endTime = format.parse(startAndEnd[1]);
TimeRange timeRange = new TimeRange(startTime, endTime);
timeRanges.add(timeRange);
}
return timeRanges;
}
/**
* 表示一个时间段
*/
static class TimeRange {
private Date startTime;
private Date endTime;
public TimeRange(Date startTime, Date endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
/**
* 判断该时间段是否与另一个时间段有重叠部分
* @param other 另一个时间段
* @return 是否有重叠部分
*/
public boolean isOverlap(TimeRange other) {
return !(this.endTime.before(other.startTime) || this.startTime.after(other.endTime));
}
}
}
```
这个程序将传入的工作时间段和剩余可用时间段字符串解析成时间段列表,然后逐一判断剩余可用时间段是否与工作时间段有重叠部分。时间段之间的重叠部分可以通过判断它们的开始时间和结束时间是否有重叠来进行判断。
阅读全文