JAVA 1.传入工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入已工作时间段(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm) 3.计算出未工作的时间段 返回(HH:mm-HH:mm;HH:mm-HH:mm) 例如: 工作时间段是08:00-09:00;10:00-11:00 已工作时间段是08:17-08:20;10:01-10:19 程序应该返回 08:00-08:17;08:20-09:00;10:00-10:01;10:19-11:00
时间: 2023-08-02 14:09:30 浏览: 132
swift-一个超级简单的计时器在macOS菜单条上显示hh:mm格式的时间
好的,我可以帮你解决这个问题。以下是Java代码示例:
```
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class WorkTimeCalculator {
public static void main(String[] args) {
String workTimeStr = "08:00-09:00;10:00-11:00";
String workedTimeStr = "08:17-08:20;10:01-10:19";
List<String> unworkedTimeList = getUnworkedTimeList(workTimeStr, workedTimeStr);
System.out.println(String.join(";", unworkedTimeList));
}
public static List<String> getUnworkedTimeList(String workTimeStr, String workedTimeStr) {
List<String> unworkedTimeList = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
try {
// 解析工作时间段字符串
String[] workTimeArray = workTimeStr.split(";");
List<Date[]> workTimeRanges = new ArrayList<>();
for (String workTime : workTimeArray) {
String[] timeRange = workTime.split("-");
Date start = sdf.parse(timeRange[0]);
Date end = sdf.parse(timeRange[1]);
workTimeRanges.add(new Date[]{start, end});
}
// 解析已工作时间段字符串
String[] workedTimeArray = workedTimeStr.split(";");
List<Date[]> workedTimeRanges = new ArrayList<>();
for (String workedTime : workedTimeArray) {
String[] timeRange = workedTime.split("-");
Date start = sdf.parse(timeRange[0]);
Date end = sdf.parse(timeRange[1]);
workedTimeRanges.add(new Date[]{start, end});
}
// 计算未工作的时间段
for (Date[] workTimeRange : workTimeRanges) {
Date workStartTime = workTimeRange[0];
Date workEndTime = workTimeRange[1];
for (Date[] workedTimeRange : workedTimeRanges) {
Date workedStartTime = workedTimeRange[0];
Date workedEndTime = workedTimeRange[1];
if (workStartTime.before(workedStartTime) && workEndTime.after(workedStartTime)) {
// 已工作时间段在工作时间段的起始部分
unworkedTimeList.add(sdf.format(workStartTime) + "-" + sdf.format(workedStartTime));
workStartTime = workedEndTime;
} else if (workStartTime.after(workedEndTime) || workEndTime.before(workedStartTime)) {
// 已工作时间段在工作时间段的结束部分或未重叠
continue;
} else {
// 已工作时间段在工作时间段的中间部分
workStartTime = workedEndTime;
}
}
if (workStartTime.before(workEndTime)) {
// 添加工作时间段剩余部分
unworkedTimeList.add(sdf.format(workStartTime) + "-" + sdf.format(workEndTime));
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return unworkedTimeList;
}
}
```
这个程序可以计算出未工作的时间段,并将其以字符串形式返回。你可以将工作时间段和已工作时间段的字符串传入 `getUnworkedTimeList()` 方法,它会返回未工作的时间段列表。
阅读全文