Java计算Date类型日期的相差天数去除工作日
时间: 2023-11-11 20:02:13 浏览: 74
Java中可以使用Date类来表示日期和时间,计算两个Date类型日期的相差天数可以使用Java 8中的java.time包中的LocalDate类和Period类。去除工作日可以使用Java 8中的java.time.temporal.TemporalAdjusters类和java.time.DayOfWeek枚举类来实现。
示例代码如下:
```java
import java.util.Calendar;
import java.util.Date;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.time.DayOfWeek;
public class DateDiffWithoutWeekend {
public static void main(String[] args) {
Date startDate = new Date(121, 0, 1); // 2021-01-01
Date endDate = new Date(121, 0, 10); // 2021-01-10
// 将Date类型转换为LocalDate类型
LocalDate startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
long days = ChronoUnit.DAYS.between(startLocalDate, endLocalDate);
// 去除周末
int weekends = 0;
LocalDate date = startLocalDate;
while (date.isBefore(endLocalDate)) {
if (date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY) {
weekends++;
}
date = date.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
}
long workingDays = days - weekends;
System.out.println("相差天数(不去除周末):" + days);
System.out.println("相差天数(去除周末):" + workingDays);
}
}
```
在代码中,我们首先使用Date类创建开始日期和结束日期,然后将它们转换为LocalDate类型,再使用ChronoUnit类的DAYS字段计算它们之间的天数。
接下来,我们使用while循环和TemporalAdjusters类的next()方法来遍历开始日期和结束日期之间的所有周一,并在每个周末(即周六和周日)增加计数器。最后,我们将周末的计数器从总天数中减去,得到去除周末后的工作日天数。
注意:本代码仅适用于计算两个日期之间的天数,如果需要计算工作日的小时数或分钟数,则需要进行更复杂的计算。
阅读全文