JAVA 计算指定工作日的工时 单位(分钟) 1.传入工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入两个工作起止时间(Date类型) 3.传入一个指定年月日(Date类型) 4.返回指定这天工作日共工作了多少(分钟)
时间: 2024-01-06 21:03:14 浏览: 222
除去星期天,节假日,工作日算法
以下是一个实现此功能的 JAVA 代码示例:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class WorkTimeCalculator {
/**
* 计算指定工作日的工时(单位:分钟)
* @param workPeriodStr 工作时段字符串,格式为 "HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm"
* @param workStartTime 工作起始时间
* @param workEndTime 工作结束时间
* @param specifiedDate 指定日期
* @return 指定这天工作日共工作了多少分钟
*/
public static int calculateWorkTime(String workPeriodStr, Date workStartTime, Date workEndTime, Date specifiedDate) {
// 将工作时段字符串解析成数组
String[] workPeriods = workPeriodStr.split(";");
int totalWorkTime = 0;
for (String period : workPeriods) {
// 将工作时段字符串解析成起止时间
String[] startEndTimes = period.split("-");
String startTimeStr = startEndTimes[0];
String endTimeStr = startEndTimes[1];
try {
Date startTime = new SimpleDateFormat("HH:mm").parse(startTimeStr);
Date endTime = new SimpleDateFormat("HH:mm").parse(endTimeStr);
// 将指定日期与工作起止时间合并成完整的时间
Calendar startCal = Calendar.getInstance();
startCal.setTime(workStartTime);
startCal.set(Calendar.YEAR, specifiedDate.getYear() + 1900);
startCal.set(Calendar.MONTH, specifiedDate.getMonth());
startCal.set(Calendar.DATE, specifiedDate.getDate());
startCal.set(Calendar.HOUR_OF_DAY, startTime.getHours());
startCal.set(Calendar.MINUTE, startTime.getMinutes());
startCal.set(Calendar.SECOND, 0);
startCal.set(Calendar.MILLISECOND, 0);
Calendar endCal = Calendar.getInstance();
endCal.setTime(workEndTime);
endCal.set(Calendar.YEAR, specifiedDate.getYear() + 1900);
endCal.set(Calendar.MONTH, specifiedDate.getMonth());
endCal.set(Calendar.DATE, specifiedDate.getDate());
endCal.set(Calendar.HOUR_OF_DAY, endTime.getHours());
endCal.set(Calendar.MINUTE, endTime.getMinutes());
endCal.set(Calendar.SECOND, 0);
endCal.set(Calendar.MILLISECOND, 0);
// 如果工作时间在指定日期内,计算工作时长
if (startCal.getTime().compareTo(workEndTime) < 0 && endCal.getTime().compareTo(workStartTime) > 0) {
Calendar start = startCal.compareTo(workStartTime) > 0 ? startCal : Calendar.getInstance();
start.setTime(workStartTime);
Calendar end = endCal.compareTo(workEndTime) < 0 ? endCal : Calendar.getInstance();
end.setTime(workEndTime);
int workTime = (int) ((end.getTimeInMillis() - start.getTimeInMillis()) / (1000 * 60));
totalWorkTime += workTime;
}
} catch (ParseException e) {
e.printStackTrace();
}
}
return totalWorkTime;
}
public static void main(String[] args) throws ParseException {
String workPeriodStr = "09:00-12:00;14:00-18:00";
Date workStartTime = new SimpleDateFormat("HH:mm").parse("09:00");
Date workEndTime = new SimpleDateFormat("HH:mm").parse("18:00");
Date specifiedDate = new SimpleDateFormat("yyyy-MM-dd").parse("2021-09-15");
int workTime = calculateWorkTime(workPeriodStr, workStartTime, workEndTime, specifiedDate);
System.out.println(workTime);
}
}
```
这个示例中,我们假设工作时间段是 "09:00-12:00;14:00-18:00",工作起始时间是 09:00,工作结束时间是 18:00。我们要计算 2021 年 9 月 15 日的工作时间。该代码的输出结果是 360,表示这一天工作了 6 个小时。
阅读全文