下面是详细讲解计算两个日期之间天数的攻略:
1. 计算基本思路
- 首先,获取两个日期的时间戳,可使用 java.util.Date 类的 getTime() 方法将日期转换为 Timestamp 形式。
- 然后,将两个日期之间的时间戳相减,得到两个日期之间的毫秒数差。
- 最后,将毫秒数差转换为天数,并排除掉节假日和周末。
2. 排除节假日和周末
排除掉节假日和周末,有多种实现方法,下面介绍两种:
使用 Calendar 类实现
通过 Calendar 类,可以很方便地判断日期是否为周末或节假日。具体操作步骤:
- 获取两个日期之间所有的日期;
- 遍历每个日期,判断是否为周末或节假日,如果是,则将该日期从天数统计中排除掉。
public static int getWorkDays(Date startDay, Date endDay) {
int workDays = 0;
Calendar cal = Calendar.getInstance();
cal.setTime(startDay);
while (cal.getTimeInMillis() <= endDay.getTime()) {
if (cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
&& cal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY
&& !isHoliday(cal)) {
workDays++;
}
cal.add(Calendar.DAY_OF_MONTH, 1);
}
return workDays;
}
public static boolean isHoliday(Calendar cal) {
// 判断是否为节假日
// TODO: 自行实现节假日列表和判断逻辑
}
使用工具类实现
如果不想自己实现节假日列表和判断逻辑,可以使用第三方工具类,比如 chholidays 工具类,该工具类已经包含了 2021 年至 2030 年所有的节假日列表。
public static int getWorkDays(Date startDay, Date endDay) {
int workDays = 0;
while (startDay.getTime() <= endDay.getTime()) {
if (CHHolidays.isWorkday(startDay)) {
workDays++;
}
startDay.setTime(startDay.getTime() + 24 * 3600 * 1000);
}
return workDays;
}
3. 示例演示
下面演示两个示例,分别使用上面介绍的两种方法实现计算两个日期之间的天数,排除掉节假日和周末。
使用 Calendar 类实现
public static void main(String[] args) throws ParseException {
String startTime = "2023-01-01";
String endTime = "2023-02-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date startDay = sdf.parse(startTime);
Date endDay = sdf.parse(endTime);
int workDays = getWorkDays(startDay, endDay);
System.out.println("工作日天数:" + workDays);
}
使用工具类实现
public static void main(String[] args) throws ParseException {
String startTime = "2023-01-01";
String endTime = "2023-02-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date startDay = sdf.parse(startTime);
Date endDay = sdf.parse(endTime);
int workDays = getWorkDays(startDay, endDay);
System.out.println("工作日天数:" + workDays);
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java计算两个日期之前的天数实例(排除节假日和周末) - Python技术站