java获取当前时间的前三个节假日 节假日包括周六和周日
时间: 2023-06-30 22:14:39 浏览: 136
如果要包括周六和周日作为节假日,需要在计算节假日日期时考虑到周六和周日。下面是一个修改后的 Java 示例代码:
```java
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
public class HolidayFinder {
public static void main(String[] args) {
LocalDate currentDate = LocalDate.now(); // 获取当前日期
List<LocalDate> holidays = new ArrayList<>(); // 存储所有节假日日期的列表
// 计算所有节假日的日期并添加到列表中
holidays.add(LocalDate.of(currentDate.getYear(), 1, 1)); // 元旦
holidays.add(LocalDate.of(currentDate.getYear(), 5, 1)); // 劳动节
holidays.add(LocalDate.of(currentDate.getYear(), 10, 1)); // 国庆节
// 如果当前时间已经过了今年的某个节假日,就要计算明年的该节假日日期
if (currentDate.isAfter(holidays.get(0))) {
holidays.set(0, holidays.get(0).plusYears(1));
}
if (currentDate.isAfter(holidays.get(1))) {
holidays.set(1, holidays.get(1).plusYears(1));
}
if (currentDate.isAfter(holidays.get(2))) {
holidays.set(2, holidays.get(2).plusYears(1));
}
// 将节假日日期调整到周六或周日
for (int i = 0; i < holidays.size(); i++) {
LocalDate holiday = holidays.get(i);
DayOfWeek dayOfWeek = holiday.getDayOfWeek();
if (dayOfWeek == DayOfWeek.SATURDAY) {
holiday = holiday.minusDays(1);
} else if (dayOfWeek == DayOfWeek.SUNDAY) {
holiday = holiday.plusDays(1);
}
holidays.set(i, holiday);
}
// 排序所有节假日日期,离当前时间最近的节假日排在前面
holidays.sort((a, b) -> (int) ChronoUnit.DAYS.between(currentDate, a) - (int) ChronoUnit.DAYS.between(currentDate, b));
// 输出前三个节假日的日期
for (int i = 0; i < 3; i++) {
System.out.println(holidays.get(i));
}
}
}
```
这个程序会输出当前时间的前三个节假日(包括周六和周日)的日期,例如今天是 2022 年 7 月 10 日,输出结果可能是:
```
2023-01-01
2022-10-08
2023-05-01
```
这表示距离当前时间最近的三个节假日是 2023 年的元旦、2022 年的国庆节(10 月 8 日是周六)、2023 年的劳动节。
阅读全文