java - 如何找到两个日期之间的周末数

标签 java

我的问题如下,我需要知道两个日期之间有多少个周末。 由于我对我的解决方案不满意,所以我四处询问。

int numberOfWeekendContained(LocalDate start, LocalDate end) {
    int weekends = 0;
    for (LocalDate day = startTime.toLocalDate(); !day.isAfter(end); day = day.plusDays(1)) {
        LocalDate previousDay = day.minusDays(1);
        if (isWeekEnd(day) && (!isWeekEnd(previousDay) || !isInRange(previousDay, start, end))) {
            weekends++;
        }
    }
    return weekends;
}

private static boolean isWeekEnd(LocalDate day) {
    return DayOfWeek.SATURDAY.equals(day.getDayOfWeek()) || DayOfWeek.SUNDAY.equals(day.getDayOfWeek());
}

private static boolean isInRange(LocalDate day, LocalDate start, LocalDate end) {
    return !day.isBefore(start) && !day.isAfter(end);
}

周日或周六算作一个完整的周末。也就是说,如果我的范围从周日到周一,我就有 1 个周末。如果从周日到下周六,则计为 2。

我真的不喜欢 if,我认为它太复杂,乍一看难以理解。

有人知道如何使其更清洁吗?

最佳答案

我认为这可以解决问题:

public static int numberOfWeekendContained(LocalDate start, LocalDate end) {
    LocalDate firstMondayAfterStart = start.plusDays(8-start.getDayOfWeek().getValue());
    LocalDate lastSundayBeforeEnd = end.minusDays(end.getDayOfWeek().getValue());

    int numberOfWeeksInbetween = Math.floorDiv(Period.between(firstMondayAfterStart, lastSundayBeforeEnd).getDays() + 1, 7);

    return 
        Math.max(0, Math.min(2, 7 - start.getDayOfWeek().getValue())) +     // weekend days from the start week
        Math.max(0, end.getDayOfWeek().getValue() - 5) +                    // weekend days from the end week
        numberOfWeeksInbetween * 2;                                         // weekend days from the weeks inbetween

}

你可以试试here .

关于java - 如何找到两个日期之间的周末数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41187791/

相关文章:

java - 如何使用 Java SSH 读取/复制文件从 unix box 到 windows

java - XML 命名空间在 XPath + java 中解析文件时出现问题

java - 回车换行 Windows 和 Linux java 应用程序

java - 如何在 netcdf 文件中减去连续的每日数据及其后继日期?

java - 为什么 course[] 对象不能跟随指向 double 的指针?

java - 为什么我切换机器后这段代码就停止工作了?

java - Netbeans:是否可以自定义自动完成?

java - 从另一个端点调用 REST 端点

java - 在java中记录异常时在哪里指定文件名和路径?

java - 浏览具有特定点的数组