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