Java获取一段时间内中国的工作日

介绍

在开发过程中,我们经常需要获取一段时间内的工作日。对于中国来说,工作日是指周一到周五,不包括法定假日。本文将介绍如何使用Java来实现获取一段时间内中国的工作日。

流程

下面是实现该功能的流程图:

erDiagram
    开始 --> 获取起始日期和结束日期
    获取起始日期和结束日期 --> 获取两个日期之间的所有日期
    获取两个日期之间的所有日期 --> 循环判断每个日期是否为工作日
    循环判断每个日期是否为工作日 --> 输出结果
    输出结果 --> 结束

代码实现

获取起始日期和结束日期

首先,我们需要获取用户输入的起始日期和结束日期。可以使用java.util.Scanner类来实现:

Scanner scanner = new Scanner(System.in);
System.out.print("请输入起始日期(yyyy-MM-dd):");
String startDateStr = scanner.nextLine();
System.out.print("请输入结束日期(yyyy-MM-dd):");
String endDateStr = scanner.nextLine();

获取两个日期之间的所有日期

接下来,我们需要获取起始日期和结束日期之间的所有日期。可以使用java.time.LocalDate类和java.time.temporal.ChronoUnit枚举来实现:

LocalDate startDate = LocalDate.parse(startDateStr);
LocalDate endDate = LocalDate.parse(endDateStr);

List<LocalDate> allDates = new ArrayList<>();
long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
for (int i = 0; i <= daysBetween; i++) {
    allDates.add(startDate.plusDays(i));
}

循环判断每个日期是否为工作日

然后,我们需要循环判断每个日期是否为工作日。可以使用java.time.DayOfWeek枚举来判断日期的星期几,进而判断是否为工作日:

List<LocalDate> workDays = new ArrayList<>();
for (LocalDate date : allDates) {
    if (date.getDayOfWeek() != DayOfWeek.SATURDAY && date.getDayOfWeek() != DayOfWeek.SUNDAY) {
        workDays.add(date);
    }
}

输出结果

最后,我们需要输出结果,即获取到的工作日列表。可以使用java.util.stream流操作来实现:

System.out.println("工作日列表:");
workDays.stream()
        .map(LocalDate::toString)
        .forEach(System.out::println);

完整代码

下面是完整的代码:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class WorkdayCalculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入起始日期(yyyy-MM-dd):");
        String startDateStr = scanner.nextLine();
        System.out.print("请输入结束日期(yyyy-MM-dd):");
        String endDateStr = scanner.nextLine();

        LocalDate startDate = LocalDate.parse(startDateStr);
        LocalDate endDate = LocalDate.parse(endDateStr);

        List<LocalDate> allDates = new ArrayList<>();
        long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
        for (int i = 0; i <= daysBetween; i++) {
            allDates.add(startDate.plusDays(i));
        }

        List<LocalDate> workDays = new ArrayList<>();
        for (LocalDate date : allDates) {
            if (date.getDayOfWeek() != DayOfWeek.SATURDAY && date.getDayOfWeek() != DayOfWeek.SUNDAY) {
                workDays.add(date);
            }
        }

        System.out.println("工作日列表:");
        workDays.stream()
                .map(LocalDate::toString)
                .forEach(System.out::println);
    }
}

总结

本文介绍了如何使用Java获取一段时间内中国的工作日。通过获取起始日期和结束日期,然后获取两个日期之间的所有日期,循环判断每个日期是否为工作日,最后输出结果,我们可以方便地获得所需的工作日列表。希望本文对刚入行的小白能够有所帮助。