2012-08-26 70 views
3
Calendar c = Calendar.getInstance(); 
c.set(2019, 12, 29); 

當我做c.getTime()我得到了下面的輸出...爲什麼Calendar類的這種怪異行爲

輸出:

Wed Jan 29 17:15:27 IST 2020 //本來應該是2019

/////------------------------------------------------- ------------ //////

Calendar c = Calendar.getInstance(); 
c.set(2019, 11, 29); 

,當我做c.getTime()我得到了下面的輸出...

輸出:

Sun Dec 29 17:18:23 IST 2019

現在我不知道爲什麼從第12位改變月份至11日給了我正確的日期和時間,如果有人能夠簡單地解釋這一點,並且如果可能的話用一個簡單的小例子,我會非常感激。

+0

是的'日曆'的月份從零開始,這有點奇怪。最好使用更高效的庫http://joda-time.sourceforge.net/ – exexzian

+0

如果你使用JDK 8,你應該更喜歡java.time包到JODA。它已被摺疊到JDK中。 – duffymo

回答

5

月在Calendar是從零開始

年在格里高利曆和羅馬儒略曆的第一個月是一月份是0

假設公曆日曆,11是12月,而12是明年1月,正如您的程序顯示它的方式。

+0

+1簡單直接的解釋..... –

+0

我接受你的回答.......感謝你的快速和良好的迴應 –

1
public final void set(int year, 
         int month, 
         int date) 
Sets the values for the calendar fields YEAR, MONTH, and DAY_OF_MONTH. Previous values of other calendar fields are retained. If this is not desired, call clear() first. 
Parameters: 
year - the value used to set the YEAR calendar field. 
month - the value used to set the MONTH calendar field. Month value is 0-based. e.g., 0 for January. 
date - the value used to set the DAY_OF_MONTH calendar field. 

所以月份範圍0-11。當你使用12時,它會進入明年。

參考:HTTP://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#set(INT,INT,INT)