SORU
12 EYLÜL 2010, Pazar


NSDate yıl/ay/gün

Kaç yıl NSDate bir nesnenin/ay/gün, başka hiçbir bilgi vermiş olabilir miyim? Muhtemelen buna benzer bir şey ile bunu yapabileceğimi fark ettim:

NSCalendar *cal = [[NSCalendar alloc] init];
NSDateComponents *components = [cal components:0 fromDate:date];
int year = [components year];
int month = [components month];
int day = [components day];

Ama bir şey NSDate's yıl/ay/gün. almak kadar basit ve sorunsuz bir sürü gibi görünüyor Başka bir çözüm var mı?

CEVAP
12 EYLÜL 2010, Pazar


Bu görünüşe göre en popüler cevabım olduğu için, biraz daha fazla bilgi içeren düzenlemek için çalışacağım.

Onun adı, NSDate ve rağmen kendisi sadece makine zaman içinde bir nokta, bir tarih işaretleri. Zaman anlamı NSDate ve bir yıl, bir ay, ya da gün belirttiği arasında korelasyon yok. Bunun için, bir takvim bakın. Herhangi bir zaman olacak dönüş farklı tarih bilgileri neye dayanarak takvim bakıyorsun (tarihler aynı değil, hem Gregoryen ve Yahudi takvimleri, örneğin), ve ise Gregoryen takvimi en yaygın olarak kullanılan takvim dünya olduğumu varsayarsak - biraz önyargılı NSDate gerekir her zaman kullanın. NSDate, neyse ki, çok fazla partili.


Tarih ve saat almak sizin de bahsettiğiniz gibi NSCalendar, geçmek zorunda olacak, ama bunu yapmak için daha basit bir yolu var:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];

O NSDateComponents bir nesne içeren gün, ay, geçerli gün için geçerli sistem takvimden yıl üretir. (Not:bu her zaman geçerli değilkullanıcı tarafından belirtilentakvim, varsayılan sistem sadece.)

Eğer farklı bir takvim veya tarih kullanıyorsanız tabii ki, kolayca değiştirebilirsiniz. Mevcut takvimler ve takvim birimleri listesi NSCalendar Class Reference bulunabilir. NSDateComponents Daha fazla bilgi NSDateComponents Class Reference bulunabilir.


Başvuru için, NSDateComponents tek tek parçaları erişim oldukça basittir:

NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];

Sadece dikkatli olun: NSDateComponents yaramaz içeren geçerli bilgi için tüm alanları sormak için sürece oluşturulan onlarla geçerli bir bilgi (yani isteği NSCalendar bilgi NSCalendarUnits). NSDateComponents kendi başlarına hiçbir referans bilgileri içerir - sadece erişmek için numaraları tutan basit yapılar değiller. Ayrıca bir dönem almak istiyorsanız, örneğin, NSDateComponents NSCalendarUnitEra bayrak NSCalendar jeneratör yöntemi beslenmen gerek.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • emimusic

    emimusic

    10 Mart 2006
  • happyjpy

    happyjpy

    22 AĞUSTOS 2009
  • NewsyTech

    NewsyTech

    2 AĞUSTOS 2010