Neden Ocak ayına Java Takvim 0?
java.util.Calendar
, Ocak ayında aylık olarak tanımlanır 0, 1 ay değil. Bunun için herhangi bir özel nedeni var mı ?
Birçok kişi bu konuda kafam karışmaya gördüm
CEVAP
Sadece zaman API/Java tarih olan korkunç karışıklık bir parçası. Bir sorun var, o liste çok uzun zaman (ve bu sorunların yarısı bilmiyorum eminim) sürer. Kuşkusuz, tarihleri ve saatleri ile çalışmak zor, ama yine de aaargh.
Kendine bir iyilik yap ve Joda Time kullanın, ya da muhtemelen JSR-310.
EDİT: nedenleri neden - daha önce de belirtildiği gibi diğer cevaplar, olabilir iyi olması nedeniyle eski C API, ya da sadece genel bir duygu başlangıç herşey 0... dışında o gün start ile 1, elbette. Ben orijinal uygulama ekibi dışında hiç kimse gerçekten nedenini açıklayın diye - ama yine okuyucular çok dert değil çağırıyorum şüpheliyimnedenkötü kararlar java.util.Calendar
pislik bütün gam bakmak ve daha iyi bir şey bulmak olarak alındı.
Bir noktayı0 tabanlı kullanarak lehine dizinleri şeyler yapar "adları dizileri" daha kolay:
// I "know" there are 12 months
String[] monthNames = new String[12]; // and populate...
String name = monthNames[calendar.get(Calendar.MONTH)];
Tabii ki, bu 13 aylık bir takvim alır almaz... ama en azından boyutunu belirtilen beklediğiniz ay sayısıdır başarısız olur.
Bu bir değiliyinedeni, ama değilbirnedeni...
EDİT: istek yorum Gibi düşünüyorum ne hakkında bazı fikirler Tarih yanlış/Takvim:
- Bazlar (kuşkusuz itiraz kurucular; 0 olarak hem de ay üssü için Tarih olarak yıl baz olarak 1900) şaşırtıcı
- Mutability - değişmez türleri kullanarak yaparçokbasit gerçekten etkili bir şekilde idare etmek zorundadeğerler
- Türleri yetersiz ayarlayın: güzel farklı şeyler gibi
Date
Calendar
olması, "vs "değerler tarih olarak eksik," zaman vs vs tarih/saat .. "yerel ama ayırma - Sihirli sabitler ile çirkin kod neden olan bir API, açıkça adlı yöntem yerine
- Hakkında neden çok zor bir API - her şey yeniden olduğunda ilgili tüm iş vb
- Parametresiz kurucular kullanmak için varsayılan "şimdi zor test kod yol açar.",
- Her zaman sistemi (birçok Taşması kullanıcılar önce bir Yığın kafası karışık) yerel saat dilimi kullanan
Date.toString()
uygulama
Neden char[] şifreler için Dize Java t...
Neden belirli Unicode karakterler içer...
Neden Java geçici değişkenler var mı?...
Neden Java Vector sınıfı eski veya kul...
Neden Java statik olarak bir sınıf bil...