2012-11-23 197 views
0

我有一個日期選擇器,用戶選擇一個日期,然後選擇他想從中獲取日期的時間類型的複選框。例如:使用日期和日曆

用戶選擇十一月1,在這種情況下,結束日期將增加1,甚至如果有足夠的這種聲音簡單的慢慢開始煩擾我很多選中該複選框「月」!

的問題是Java可是沒有一個偉大的日期對象,對於這樣的事情,所以我想我會用日曆,但它不是簡單增加一個日曆日期就拿下面的示例:

endDate.set(startDate.YEAR, startDate.MONTH+1, startDate.DATE); 

理論上這會使月份增加一個比開始日期大1的月份。這部作品在十二月EXECPT月份的約90%,如果你在十二月增加本月1則整月收益13同樣的事情發生了startDate.DATE;startDate.Year;

我的問題是心不是有更簡單的方式來做到這一點?我可以做很多If句子,但我真的認爲它有點多餘。

+0

@svz月份從0開始(1月份)。 –

回答

2

使用java.util.Calendaradd方法。

endDate.set(startDate.YEAR, startDate.MONTH, startDate.DATE); 
if(some_condition) { 
    endDate.add(Calendar.MONTH, 1); 
} 
+0

在這種情況下wouldnt它是endDate.add(endDate.MONTH,1); –

+0

'Calendar.MONTH'只是表示月份的靜態變量。和這一行「startDate.YEAR,startDate.MONTH,startDate.DATE」我剛剛從你的問題複製。關鍵是你需要使用'Calendar'的'add'方法。 –

1

這裏的標準建議是查看Joda-Time(有關更多信息,請參閱here)。這是一個更加一致/有效的API,沒有任何困擾標準Java日期/格式化API的線程問題,因此被廣泛使用和接受。

在你想要什麼上面來講,我建議是這樣的:

LocalDate d = ... 
LocalDate nd = d.plusMonths(1); 

以上正確處理月/年翻車。

+0

如果我使用eclipse,我必須下載插件嗎? –

+0

不需要。只要下載jar或在你的pom.xml中引用它,如果你正在使用Maven –

1

可以使用Calendar.add()將值添加到日曆中的值,例如Calendar.add(Calendar.MONTH, 1)這增加了一個月,並考慮到一月是在十二月以後。

+0

如果日期是1月31日,這會增加月份嗎? –

+0

是的。它會帶你到2月28日或29日。 –

+0

呃什麼?這不是一件好事 –