要计算Java中工作时间(即除去节假日和双休日),一般的做法是使用第三方库或者手动编写代码来计算时间间隔并排除非工作日的时间。下面是两种实现方式的介绍。
使用第三方库
Java中有一些第三方库可以方便地计算时间间隔并排除非工作日。其中一种比较常用的是Joda-Time
库。在计算时间间隔时,可以使用Period
类,该类可以计算两个日期之间的天数、小时数、分钟数等时间间隔。在排除非工作日时,可以使用HolidayCalendar
类,该类可以定义节假日和周末,并排除这些非工作日的时间。
下面是一个示例代码:
import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.HolidayCalendar;
import org.joda.time.MutableDateTime;
public class WorkingTimeCalculator {
private static final DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
public static void main(String[] args) {
DateTime start = FORMATTER.parseDateTime("2021-09-01");
DateTime end = FORMATTER.parseDateTime("2021-09-30");
HolidayCalendar<MutableDateTime> holidayCalendar = new MyHolidayCalendar();
Period workPeriod = Period.ZERO;
MutableDateTime curDate = start.toMutableDateTime();
while (curDate.isBefore(end)) {
if (holidayCalendar.isHoliday(curDate)) {
curDate.addDays(1);
continue;
}
if (curDate.getDayOfWeek() >= 1 && curDate.getDayOfWeek() <= 5) {
workPeriod = workPeriod.plus(Period.hours(8));
}
curDate.addDays(1);
}
System.out.println("Total working time: " + workPeriod.toString());
}
private static class MyHolidayCalendar implements HolidayCalendar<MutableDateTime> {
public boolean isHoliday(MutableDateTime date) {
DateTime christmas = FORMATTER.parseDateTime("2021-12-25");
DateTime newYear = FORMATTER.parseDateTime("2022-01-01");
return date.getMonthOfYear() == christmas.getMonthOfYear() && date.getDayOfMonth() == christmas.getDayOfMonth() ||
date.getMonthOfYear() == newYear.getMonthOfYear() && date.getDayOfMonth() == newYear.getDayOfMonth();
}
public DateTime nextHoliday(MutableDateTime date) { return null; }
}
}
这个示例代码计算从2021年9月1日到2021年9月30日工作日总时间,排除双休日和9月25日(国庆节)、10月1日(国庆节)这两天节假日。代码先将时间间隔初始化为Period.ZERO
,然后循环计算每一天的工作时间,并在循环中判断是否为非工作日。
手动编写代码
在Java中手动编写代码来计算工作时间也是可行的。需要手动实现计算时间间隔和排除非工作日的逻辑。下面是一个示例代码:
import java.util.Calendar;
public class WorkingTimeCalculator {
public static void main(String[] args) {
Calendar start = Calendar.getInstance();
start.set(2021, 8, 1);
Calendar end = Calendar.getInstance();
end.set(2021, 8, 30);
int workHours = 0;
while (start.before(end)) {
int dayOfWeek = start.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) {
start.add(Calendar.DAY_OF_MONTH, 1);
continue;
}
workHours += 8;
start.add(Calendar.DAY_OF_MONTH, 1);
}
System.out.println("Total working time: " + workHours + " hours");
}
}
这个示例代码计算从2021年9月1日到2021年9月30日工作日总时间,排除双休日。代码使用Calendar
类来获取日期和星期几,并在循环中判断是否为双休日,如是则跳过计算工作时间,否则将工作时间加8小时。
这两种方式都可以实现计算Java中工作时间(即除去节假日和双休日)的功能,具体如何选择,取决于个人习惯和代码需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java计算工作时间除去节假日以及双休日 - Python技术站