2011-02-08 41 views
45

據文檔,日曆集()爲:爲什麼Java日曆設置(int year,int month,int date)沒有返回正確的日期?

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#set%28int,%20int,%20int%29

set(int year, int month, int date) 
Sets the values for the calendar fields YEAR, MONTH, and DAY_OF_MONTH. 

代碼:

Calendar c1 = GregorianCalendar.getInstance(); 
c1.set(2000, 1, 30); //January 30th 2000 
Date sDate = c1.getTime(); 

System.out.println(sDate); 

輸出:

Wed Mar 01 19:32:21 JST 2000 

爲什麼不是1月30日?在日曆對象

+8

使用java.util.Date或java.util.Calendar的任何人的標準建議:使用Joda Time,可在http://joda-time.sourceforge.net/ – mdrg 2011-02-08 10:41:54

+7

月從0 ,不是1.是的,我知道 - 這很煩人。 – 2011-02-08 10:43:06

+0

從現在開始,我將開始爲每一個可能發生的項目使用jode,與日期和日曆的不一致性和古怪程度太高! – Warpzit 2015-04-20 18:34:02

回答

90

1月是2月。二月三十日改爲三月一日。 您應該爲月份設置0。最好的是使用日曆中定義的常量:

c1.set(2000, Calendar.JANUARY, 30); 
17

個月從0開始

0 = January = Calendar.JANUARY 
1 = february = Calendar.FEBRUARY 
6

該示例中的選定日期很有趣。示例代碼塊爲:

Calendar c1 = GregorianCalendar.getInstance(); 
c1.set(2000, 1, 30); //January 30th 2000 
Date sDate = c1.getTime(); 

System.out.println(sDate); 

和輸出Wed Mar 01 19:32:21 JST 2000

當我第一次讀到的例子,我認爲輸出是錯誤的,但它是真實的:)

  • Calendar.Month是從0開始使1表示二月。
  • 2月的最後一天是28,所以輸出應該是3月2日。
  • 但是選定的年份是重要的,它是2000年的意思是2月29日所以結果應該是3月1日。
相關問題