2017-03-09 32 views
1

我確實嘗試搜索答案,但沒有找到答案。確定2個LocalDate對象之間的星期

我想決定是否以及如果在網站上不可見日期切換多少星期。我有天

LocalDate dateToSelect = parseStringDateToLocalDate(datum); 
    LocalDate lastVisibleOrderDate = getLastVisibleOrderDate(); 
    int daysDifference = Period.between(lastVisibleOrderDate,dateToSelect).getDays();] 
    int weeksToSwitch = (daysDifference/7) + 1; 

,並與時代試了一下:

Long weeks = ChronoUnit.WEEKS.between(lastVisibleOrderDate,dateToSelect); 

但是,我想不出如何計算7天的差異,仍然是在同一個星期。

場景: 最後可見日期= 2017年3月12日(星期日) 日期選擇= 2017年3月13日(星期一)

差= 1. 7 = 0,加1,這樣分切換到下週。太棒了!作品。

然而,如果選擇的時間是由圖7和加上1 = 2分2017年3月19日(星期日)的差= 7。這將開關2星期,但它僅需要切換1.

它應該能夠來回切換幾個星期,所以將一天添加到lastVisibleOrderDate或在dateToSelect減去一天將給出問題。

我能做到這一點(爲正切換),但它不是我希望的最好的選項:

if (0 < daysDifference && daysDifference <= 7){ 

    } else if (7 < daysDifference && daysDifference <=14){ 

    } else if (14 < daysDifference && daysDifference <=21){ 

    } else if (21 < daysDifference && daysDifference <=28){ 

    } 

有什麼建議?

+2

是否'ChronoUnit.WEEKS :: between'不是你想要的嗎?你只用'days/7'方法解釋你的問題,而不是'WEEKS.get'方法。 –

+0

確實沒有工作。它仍然會有日差問題 – Blitzoff

回答

1

你想用ChronoUnit來測量時間。

在你的問題中,你是否真的在測量一個8天的星期。如果你減去兩天的答案是基於0,最低的數字是0,而不是1.因此,7天實際上是一週+ 1天在你的例子。

我相信這會讓你得到你想要的結果。

LocalDate lastVisible = LocalDate.of(2017, 3, 12); 
LocalDate dateToSelect = LocalDate.of(2017, 3, 13).minusDays(1); 

long weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect); 
System.out.println("number of weeks "+ weeks); 

dateToSelect = LocalDate.of(2017, 3, 19).minusDays(1); 
weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect); 
System.out.println("number of weeks "+ weeks); 

dateToSelect = LocalDate.of(2017, 3, 20).minusDays(1); 
weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect); 
System.out.println("number of weeks "+ weeks); 

- 輸出:

number of weeks 0 
number of weeks 0 
number of weeks 1 

但這是讓周的實際數量。

LocalDate lastVisible = LocalDate.of(2017, 3, 12); 
LocalDate dateToSelect = LocalDate.of(2017, 3, 13); 

long weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect); 
System.out.println("number of weeks "+ weeks); 

dateToSelect = LocalDate.of(2017, 3, 19); 
weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect); 
System.out.println("number of weeks "+ weeks); 

// to get number of weeks regardless of going forward or backwards in time 
dateToSelect = LocalDate.of(2017, 3, 20); 
weeks = Math.abs(ChronoUnit.WEEKS.between(dateToSelect, lastVisible)); 
System.out.println("number of weeks "+ weeks); 

- 輸出:

number of weeks 0 
number of weeks 1 
number of weeks 1 
+0

謝謝。這確實不是那麼困難,你的解決方案有利於積極的分歧。 爲了解決消極的差異,像這樣的東西將起作用。 (daysDifference> 0){ int switchWeeks =((daysDifference-1)/ 7)+1);其它{ int switchWeeksBack = daysDifference/7; } – Blitzoff

+0

你只需要abs()返回值的時間。增加了一個例子來回答。 – denov

0

您可以使用雙來避免這種情況:

double daysDifferenceDbl = daysDifference; 
double weeksToSwitchDbl = (daysDifferenceDbl/7) + 1;   
int weeksToSwitch = (int) weeksToSwitchDbl; 
+0

我沒有看到這個工作。 DaysDifference始終是一個整數。 weeksToSwitch as double沒有區別,因爲您仍然有7/7 = 1.00。 – Blitzoff

+0

是的,但1.0/7.0 = 0.14,它不同於1/7 = 0(問題的問題)。嘗試一下。 – victorpacheco3107