Java中两个日期之间的星期一数

时间:2017-06-15 13:21:45

标签: java dayofweek java-date

有人可以提出逻辑来找出答案。在Java中的两个日期之间的星期一?

有没有其他任何方法来计算no,而不是遍历所有日子。在java中两个日期之间出现的星期一

2 个答案:

答案 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程序员,但我是编码员。以下是我如何解决这个问题:

  1. 计算两个日期之间的天数(又名DATESPAN)。我确信Java有这个功能。

  2. 获取两个日期的“星期几”(AS A NUMBER,假设星期一= 1)。我确信Java也有这个功能。我们需要知道是否是星期一。

  3. 如果DATESPAN < 7使用此逻辑:

    Answer = End Date Number > DATESPAN ? 0 : 1
    
  4. 如果DATESPAN >=7继续获得答案:

  5. DATESPAN除以7。

  6. 如果该部门有余数,请使用该商的最低值作为答案。

  7. 如果没有余数,请检查开始日期和结束日期。如果两者都是星期一,则商是答案,如果不是商 - 答案是答案