2012-12-29 80 views
1

我有以下幾點:爲什麼我的日期未被正確設置爲30天?

Date now = new Date(); 
    Date futureDate = new Date(now.getYear(), now.getMonth(), now.getDay() + 30); 

我想設置的未來日期值將在未來的30天,根據當前日期(現在)。

當調試這一點,現在是正確的日期和futureDate是:

Sat Jan 05 00:00:00 EST 2013 

今天的日期,現在的價值是:星期六12月29日17時31分58秒美國東部時間2012年

這對我沒有意義嗎?

我正在使用util.Date。

+1

從http://docs.oracle.com/javase/1.5.0/docs/api/java/sql/Date.html:不建議使用Date(int year,int month,int day)構造函數。使用'日期(長日期)'。 – irrelephant

+0

是的,那是幾個版本之前。 –

+1

這解釋了爲什麼Intellij通過參數放置線:) – Blankman

回答

7

因爲getDay()返回一週中的某天,而不是該月的某天。

所以你

now.getDay() + 30 

變得星期六+ 30 = 6 + 30 = 36月= 1月5日

速戰速決將用來替換您的代碼:

now.getDate() + 30 

但正如其他人已經建議,java.util.Date是一種不贊成使用。你應該使用Calendar.add()。所以,你的代碼將成爲類似:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, +30); 
+0

是否有更準確的方法來減去一個月? (因爲月份可能是29,30或31天)。 – Blankman

+0

減去或添加?是的,你可以使用'cal.add(Calendar.MONTH,+1);' –

4

您應該使用日曆和方法Calendar。新增

0

不僅是該構造過時,它只接受有效天數(1-31)。

請嘗試使用java.util.Calendar代替。

0

Date不應該用於這樣的計算。

看看JodaTime,這對於這樣的事情是非常有效的。

相關問題