Java中如何获取两个日期之间的工作日

pon*_*ik1 0 java date

我的问题是我需要获取用户输入的两个日期之间的工作日。我不知道用什么来比较和获取日期,但有我的代码。

    // Scanner
    Scanner input = new Scanner(System.in);
    System.out.println("First date: ");
    String date1 = input.nextLine();
    System.out.println("Second date: ");
    String date2 = input.nextLine();
    input.close();
    
    // The format for the Date
    DateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");
    
    // Conver String to Date
    Date date_1 = formatDate.parse(date1);
    Date date_2 = formatDate.parse(date2);
    
    // Calendar
    Calendar calendar = Calendar.getInstance();
    
    // Date to Calendar
    calendar.setTime(date_1);
    calendar.setTime(date_2);
Run Code Online (Sandbox Code Playgroud)

现在我需要做一些事情来获得这些日期之间的工作日,但我不知道如何

MC *_*ror 5

您最好使用java.time包中的类。Date它们的设计比、Calendar和更好SimpleDateFormat这就是这些类的问题所在

\n

您可以在两个给定日期之间的所有日期创建一个流,然后过滤(保留)工作日。

\n
LocalDate startDate = LocalDate.of(2012, 3, 7);\nLocalDate endDate = LocalDate.of(2012, 6, 7);\n\n// Static imports from java.time.DayOfWeek\nfinal Set<DayOfWeek> businessDays = Set.of(\n    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY\n);\n\nList<LocalDate> allDates =\n\n    // Generate a stream with all dates between startDate\n    // and endDate (the latter is exclusive)\n    startDate.datesUntil(endDate)\n\n        // Retain all business days.\n        .filter(t -> businessDays.contains(t.getDayOfWeek()))\n\n         // Collect them into a List.\n        .collect(Collectors.toList());\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,该datesUntil方法自 Java \xe2\x89\xa5 9 起可用。如果您碰巧仍在使用 Java 8,则必须采取一些额外的步骤来代替startDate.datesUntil(endDate):计算这两个日期之间的天数,然后生成将其限制为这些天数的流。

\n
long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate);\nStream.iterate(startDate, d -> d.plusDays(1))\n    .limit(numOfDaysBetween)\n
Run Code Online (Sandbox Code Playgroud)\n