JAVA 1.传入工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入工作开始日期时间(Date类型yyyy-MM-dd hh:mm:ss) 3.传入工作结束日期时间(Date类型yyyy-MM-dd hh:mm:ss) 4.传入一个指定年月日(Date类型yyyy-MM-dd),该日期已知在工作开始和结束日期之间 5.计算第四步这天工作了多少分钟 单位(分钟)
时间: 2024-02-05 19:10:41 浏览: 61
可以使用Java中的日期时间类和正则表达式来实现这个需求。
首先,我们需要将工作时段字符串按照";"分割成多个工作时段。然后,对于每个工作时段,我们需要将其按照"-"分割成起始时间和结束时间,并将它们转换为Date类型。
接下来,我们可以将传入的指定年月日转换为Calendar类型,并将其设置为当天的起始时间(即当天的00:00:00)。然后,我们可以依次判断该日期是否在每个工作时段内,并计算出该日期在工作时段内的时间。
最后,将每个工作时段内的时间相加,得到该日期在工作时段内工作的总时间。
以下是示例代码:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WorkTimeCalculator {
private static final String TIME_PATTERN = "HH:mm";
private static final String WORK_TIME_PATTERN = TIME_PATTERN + "-" + TIME_PATTERN;
private static final String WORK_TIME_SEPARATOR = ";";
public static int calculateWorkTime(String workTimeStr, Date startTime, Date endTime, Date date) throws ParseException {
// 将工作时段字符串按照";"分割成多个工作时段
String[] workTimeArray = workTimeStr.split(WORK_TIME_SEPARATOR);
int totalWorkTime = 0;
// 将指定日期转换为Calendar类型,并设置为当天的起始时间
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date startOfDay = calendar.getTime();
// 遍历每个工作时段,并计算该日期在工作时段内的时间
for (String workTime : workTimeArray) {
Pattern pattern = Pattern.compile(WORK_TIME_PATTERN);
Matcher matcher = pattern.matcher(workTime);
if (matcher.matches()) {
String startTimeStr = matcher.group(1);
String endTimeStr = matcher.group(2);
// 将起始时间和结束时间转换为Date类型
SimpleDateFormat sdf = new SimpleDateFormat(TIME_PATTERN);
Date startWorkTime = sdf.parse(startTimeStr);
Date endWorkTime = sdf.parse(endTimeStr);
// 将起始时间和结束时间设置为当天的日期
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startOfDay);
startCalendar.set(Calendar.HOUR_OF_DAY, startWorkTime.getHours());
startCalendar.set(Calendar.MINUTE, startWorkTime.getMinutes());
startCalendar.set(Calendar.SECOND, 0);
startCalendar.set(Calendar.MILLISECOND, 0);
Date start = startCalendar.getTime();
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(startOfDay);
endCalendar.set(Calendar.HOUR_OF_DAY, endWorkTime.getHours());
endCalendar.set(Calendar.MINUTE, endWorkTime.getMinutes());
endCalendar.set(Calendar.SECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);
Date end = endCalendar.getTime();
// 判断指定日期是否在该工作时段内,并计算该日期在工作时段内的时间
if (date.after(start) && date.before(end)) {
int workTimeInMinutes;
if (date.after(startTime) && date.before(endTime)) {
// 如果指定日期在工作开始时间和结束时间之间,则计算指定日期在工作时段内的时间
workTimeInMinutes = (int) ((endTime.getTime() - date.getTime()) / (1000 * 60));
} else if (date.before(startTime)) {
// 如果指定日期在工作开始时间之前,则计算该工作时段的总时间
workTimeInMinutes = (int) ((end.getTime() - start.getTime()) / (1000 * 60));
} else {
// 如果指定日期在工作结束时间之后,则不计算时间
workTimeInMinutes = 0;
}
totalWorkTime += workTimeInMinutes;
}
}
}
return totalWorkTime;
}
}
```
使用示例:
```java
String workTimeStr = "09:00-12:00;13:00-18:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startTime = sdf.parse("2022-01-01 09:30:00");
Date endTime = sdf.parse("2022-01-01 17:30:00");
Date date = sdf.parse("2022-01-01");
int workTime = WorkTimeCalculator.calculateWorkTime(workTimeStr, startTime, endTime, date);
System.out.println("Work time on " + sdf.format(date) + " is " + workTime + " minutes");
```
输出结果:
```
Work time on 2022-01-01 is 390 minutes
```
阅读全文