2014-01-19 83 views
1

後,我已經寫了下面的代碼Java日曆。功能沒有返回預期的結果

Calendar now = Calendar.getInstance(); 
Calendar expiry = Calendar.getInstance(); 
expiry.set(2014, 1, 15, 0, 0); 
now.after(expiry); 

這是給我假的,今天是19日它應該給真正

我錯過了什麼?

+0

最好使用日曆類提供的常量。正如@ peter.petrov指出1實際上代表2月。 'expiry.set(2014,Calendar.JANUARY,15,0,0)'在這種情況下。 [see here](http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html) – kmera

回答

2

(1)第1個月是2月份,而不是1月份,因爲您認爲。月份爲1月份。 (2)另外,我會在調用after()之前調用getTime()來保證安全。

Calendar now = Calendar.getInstance(); 
Calendar expiry = Calendar.getInstance(); 
expiry.set(2014, 0, 15, 0, 0); 
expiry.getTime(); 
now.after(expiry); 

不確定是否嚴格需要調用getTime()。

我指的是JavaDoc的這一部分。

set(f,value)將日曆欄f更改爲值。另外,它設置一個內部成員變量
以指示日曆字段f已被更改。
儘管日曆字段f會立即更改,但直到下一次調用get(),getTime(),
getTimeInMillis(),add()或roll()時纔會重新計算日曆的時間值
(以毫秒爲單位)。因此,多次調用set()
不會觸發多次不必要的計算。由於使用set()將日曆字段更改爲
,所以其他日曆字段也可能會更改,具體取決於日曆字段上的
,日曆字段值和日曆系統。
另外,get(f)不一定會返回在重新計算日曆字段後通過調用
set方法設置的值。
具體細節由具體的日曆類決定。

+0

謝謝。 +1給你。 –

+0

getTime()不應該被需要,你可以很容易地測試它,以確保儘管。 –

+0

@TimB OK ...好吧,我知道,但我不想僅僅通過特定的測試來確認它,你知道的。我的意思是我不確定OP使用的set方法是否具有這個set(f,value)所具有的相同特性。如果有,getTime()是需要的,我猜。我不確定我自己。 –