2017-06-15 228 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)

相關問題