我的问题是我需要获取用户输入的两个日期之间的工作日。我不知道用什么来比较和获取日期,但有我的代码。
// 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)
现在我需要做一些事情来获得这些日期之间的工作日,但我不知道如何
您最好使用java.time包中的类。Date它们的设计比、Calendar和更好SimpleDateFormat。这就是这些类的问题所在。
您可以在两个给定日期之间的所有日期创建一个流,然后过滤(保留)工作日。
\nLocalDate 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());\nRun Code Online (Sandbox Code Playgroud)\n请注意,该datesUntil方法自 Java \xe2\x89\xa5 9 起可用。如果您碰巧仍在使用 Java 8,则必须采取一些额外的步骤来代替startDate.datesUntil(endDate):计算这两个日期之间的天数,然后生成将其限制为这些天数的流。
long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate);\nStream.iterate(startDate, d -> d.plusDays(1))\n .limit(numOfDaysBetween)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2821 次 |
| 最近记录: |