JAVA 计算指定工作日的工时 单位(分钟) 1.传入工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入工作起止时间(Date类型) 3.传入一个指定年月日(Date类型) 4.计算第三步中指定的这天工作日共工作了多少(分钟)
时间: 2024-01-23 17:02:36 浏览: 26
以下是一个简单的Java代码实现,可以根据你的需求进行修改:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class WorkTimeCalculator {
private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
public static void main(String[] args) throws ParseException {
String workPeriod = "09:00-12:00;13:00-18:00"; // 工作时段字符串
Date workStart = sdf.parse("09:00"); // 工作起始时间
Date workEnd = sdf.parse("18:00"); // 工作结束时间
Date date = new Date(); // 指定日期
int workMinutes = calculateWorkMinutes(workPeriod, workStart, workEnd, date);
System.out.println("工作时段:" + workPeriod);
System.out.println("工作起始时间:" + sdf.format(workStart));
System.out.println("工作结束时间:" + sdf.format(workEnd));
System.out.println("指定日期:" + date);
System.out.println("当天工作分钟数:" + workMinutes);
}
/**
* 计算指定工作日的工时(单位:分钟)
*
* @param workPeriod 工作时段字符串,格式为"HH:mm-HH:mm;HH:mm-HH:mm;..."
* @param workStart 工作起始时间
* @param workEnd 工作结束时间
* @param date 指定日期
* @return 指定日期工作分钟数
*/
public static int calculateWorkMinutes(String workPeriod, Date workStart, Date workEnd, Date date) {
int workMinutes = 0;
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String[] periods = workPeriod.split(";");
for (String period : periods) {
String[] times = period.split("-");
Date start = parseTime(times[0]);
Date end = parseTime(times[1]);
if (isSameDay(cal.getTime(), date)) {
// 如果是指定日期,计算当天工作分钟数
if (start.before(workEnd) && end.after(workStart)) {
// 工作时间与指定工作时段有交集
Date startTime = start.after(workStart) ? start : workStart;
Date endTime = end.before(workEnd) ? end : workEnd;
workMinutes += getMinutesBetween(startTime, endTime);
}
} else {
// 如果不是指定日期,计算整个工作时间的分钟数
if (start.before(end)) {
workMinutes += getMinutesBetween(start, end);
} else {
workMinutes += getMinutesBetween(start, workEnd);
workMinutes += getMinutesBetween(workStart, end);
}
}
}
return workMinutes;
}
/**
* 解析时间字符串为Date类型
*
* @param time 时间字符串,格式为"HH:mm"
* @return Date类型的时间
*/
private static Date parseTime(String time) {
try {
return sdf.parse(time);
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid time format: " + time);
}
}
/**
* 判断两个日期是否是同一天
*
* @param date1 日期1
* @param date2 日期2
* @return 是否是同一天
*/
private static boolean isSameDay(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)
&& cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH)
&& cal1.get(Calendar.DAY_OF_MONTH) == cal2.get(Calendar.DAY_OF_MONTH);
}
/**
* 计算两个时间之间的分钟数
*
* @param start 开始时间
* @param end 结束时间
* @return 分钟数
*/
private static int getMinutesBetween(Date start, Date end) {
return (int) ((end.getTime() - start.getTime()) / (1000 * 60));
}
}
```