2017-06-15 229 views
-5

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

而不是循环所有的日子,是否有任何其他的方法来计算不。 java中两个日期之间的星期一发生的次数

+3

你可以发布你的代码,以便我们能够理解你正在采取什么方法 – Blip

+2

你是什么意思的“*之间*两个日期”?搜索范围中是否包含开始日期和结束日期?可以说,开始日期是一些星期一,结束日是下一个星期一。应该是0星期一还是2星期? – Pshemo

+0

在发布之前,请始终彻底搜索堆栈溢出。你可以假定任何基本的日期时间主题已经被询问和回答。 –

回答

0

我不是Java编码器,但是我是编码器。以下是我如何解决这个问题:

1)计算两个日期之间的日子(又名DATESPAN)。我相信Java有这个功能。 2)获得两个日期中的'星期几'(假设星期一= 1)。我相信Java也有这个功能。我们需要知道是否是星期一。

3)如果DATESPAN < 7使用此逻辑: 回答=结束日期数> DATESPAN?0:1

4)IF DATESPAN> = 7继续得到解答:

5)划分的DATESPAN除以7.

6)如果有除法余数,则使用商数的底面值作为答案。

7)如果没有余数,检查开始日期和结束日期。如果其中一个星期一商是答案,如果不是商 - 1是答案

+1

它不是防弹的。 6月12日是星期一。如果我选择6月10日和6月14日,答案应该是1.该分数为0,余数为4,所以根据你的项目4)0应该是答案。但你很近。 –

+0

哎呀,没有考虑如果时差小于7天。 – Scotty

+0

我更新了上面的答案以考虑日期跨度小于七天 – Scotty

2

有多种方法可以去。这里有一个建议:

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)

相关问题