2013-07-02 107 views
7

我想使用日曆方法設置年份日期和月份,但如果日期無效,例如想要顯示某種指示,使用日曆檢查日期是否有效

calendar.set(2013,Calendar.JANUARY , 23) //is a valid date 
calendar.set(2013,Calendar.JANUARY , 33) //is not 

我設置calendar.setLenient(false)和預期值設置爲33月就拋出一個異常,但事實並非如此。

回答

8

看來檢查懶洋洋地完成:

非寬鬆的GregorianCalendar拋出時異常計算其時間或日曆字段值,如果任何超出範圍的字段值已設置。

因此,這將引發你的異常:

Calendar c = new GregorianCalendar(); 
c.setLenient(false); 
c.set(2013, Calendar.JANUARY, 33); 
c.getTime(); 

但並非沒有getTime

+0

+1正確。日曆是JDK中最破碎的類的衆多原因之一。 (使用JodaTime!) – Bohemian

3

寬大隻是控制日曆是否接受超出日期的日期。如果寬大處理設置,Java會做一些數學來調整超出範圍的日期(例如,2013-12-32變爲2014-01-01)。如果沒有設置寬鬆,Java不會允許這樣做,但它不會檢查超出範圍的數據,除非您實際請求某些字段。從Javadocs

非寬鬆的GregorianCalendar拋出時異常計算其時間或日曆字段值,如果任何外的範圍字段值已被設定。

你的問題,然後:

如何處理呢?

您可以設置日曆的第一個月:

calendar.set(2013, Calendar.JANUARY, 1); 

,然後調用

int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 

和比較反對的一天價值。如果你的日值在範圍內,那麼你可以繼續。

相關問題