SORU
5 Aralık 2008, Cuma


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
5 Aralık 2008, Cuma


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • iMasterful

    iMasterful

    11 EYLÜL 2009
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006
  • listedabive

    listedabive

    30 Ocak 2007