2013-07-02 21 views
7

Tarih ve ay ayarlamak için takvimler yöntemini kullanmak istiyorum, ancak tarih geçersizse bir çeşit gösterge istiyorum.Tarihin Takvim ile geçerli olup olmadığını kontrol etme

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

Ben calendar.setLenient(false) set Ocak 33. değerini ayarlayarak bir istisna olacağını tahmin ediyordum ama öyle olmadı.

cevap

8

onay lazily yapılır görünüyor:

olmayan bir yumuşak GregorianCalendar herhangi dışı aralık alanı değeri ayarlanmışsa zamanı veya takvim alan değerlerini hesaplamak üzerine bir istisna atar.

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

Ama getTime olmadan:

Yani bu size bir özel durum oluşturur.

+0

+1 Tam olarak doğru. Takvim'in JDK’nın en kırık sınıfı olması için birçok nedenden sadece biri. (JodaTime kullan!) – Bohemian

3

Açıklık yalnızca takvim aralık dışı tarihleri ​​kabul edip etmediğini kontrol eder. Duyarlılık belirlenirse, Java aralık dışı tarihler ayarlamak için biraz matematik yapar (örneğin, 2013-12-32, 2014-01-01 olur). Duyarlılık ayarlanmazsa, Java buna izin vermez, ancak alanlardan bazılarını isteğinde bulunana kadar aralık dışı verileri denetlemez. Javadocs kaynaktan:

olmayan bir yumuşak GregorianCalendar herhangi üzerinden aralık dışı alanı değeri ayarlanmış olup olmadığını zamanı ya da takvim alan değerlerini hesaplamak üzerine bir durum oluşturur. Ben bu işi nasıl

: ardından soru için

?

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

ve sonra

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

çağırmak ve gününüzü değeri karşılaştırmak:

Sen ayın ilk takvimi ayarlayabilirsiniz. Gün değeriniz menzilde ise, devam edebilirsiniz.

İlgili konular