有人可以提出逻辑来找出答案。在Java中的两个日期之间的星期一?
有没有其他任何方法来计算no,而不是遍历所有日子。在java中两个日期之间出现的星期一
答案 0 :(得分:4)
不止一种方法。这是一个建议:
public static long noOfMondaysBetween(LocalDate first, LocalDate last) {
if (last.isBefore(first)) {
throw new IllegalArgumentException("first " + first + " was after last " + last);
}
// find first Monday in interval
LocalDate firstMonday = first.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
// similarly find last Monday
LocalDate lastMonday = last.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));
// count
long number = ChronoUnit.WEEKS.between(firstMonday, lastMonday);
// add one to count both first Monday and last Monday in
return number + 1;
}
例如,noOfMondaysBetween(LocalDate.of(2017, Month.JUNE, 15), LocalDate.of(2017, Month.JUNE, 15))
返回0.代码考虑到这种情况可能有点微妙:第一个星期一是6月19日,最后一个是6月12日。两个星期一之间的星期几是-1 ,所以当我加1时,结果为0,这是正确的。计算六月的星期一:
System.out.println(noOfMondaysBetween(LocalDate.of(2017, Month.MAY, 31), LocalDate.of(2017, Month.JULY, 1)));
结果:
4
如果您打算在计数中包含第一个日期(如果是星期一),请使用nextOrSame(DayOfWeek.MONDAY)
代替next(DayOfWeek.MONDAY)
。同样,要包含第二个日期,请使用previousOrSame(DayOfWeek.MONDAY)
。
答案 1 :(得分:0)
我不是Java程序员,但我是编码员。以下是我如何解决这个问题:
计算两个日期之间的天数(又名DATESPAN
)。我确信Java有这个功能。
获取两个日期的“星期几”(AS A NUMBER,假设星期一= 1)。我确信Java也有这个功能。我们需要知道是否是星期一。
如果DATESPAN < 7
使用此逻辑:
Answer = End Date Number > DATESPAN ? 0 : 1
如果DATESPAN >=7
继续获得答案:
将DATESPAN
除以7。
如果该部门有余数,请使用该商的最低值作为答案。
如果没有余数,请检查开始日期和结束日期。如果两者都是星期一,则商是答案,如果不是商 - 答案是答案