Görünüşe göre bu benim en popüler cevabım olduğu için, biraz daha fazla bilgi içerecek şekilde düzenlemeye çalışacağım.
İsmine rağmen, NSDate
kendi başına bir tarih değil, makine zamanında bir noktayı işaretler. Bir NSDate
ile bir yıl, ay veya gün arasında belirtilen zaman noktası arasında bir ilişki yoktur . Bunun için bir takvime başvurmanız gerekir. Zaman içinde verilen herhangi bir nokta, hangi takvime baktığınıza bağlı olarak farklı tarih bilgileri döndürür (örneğin hem Gregoryen hem de Yahudi takvimlerinde tarihler aynı değildir) ve Gregoryen takvimi, dünya - varsayıyorum - NSDate
her zaman kullanması gereken biraz önyargılıyız . NSDate
, neyse ki, çok daha iki taraflı.
NSCalendar
Bahsettiğiniz gibi, tarih ve saati almak zorunda kalacak , ancak bunu yapmanın daha basit bir yolu var:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
Bu NSDateComponents
, geçerli günün geçerli sistem takviminden gün, ay ve yılı içeren bir nesne oluşturur . ( Not: bu, kullanıcının belirlediği geçerli takvim olmak zorunda değildir , yalnızca varsayılan sistem takvimidir.)
Elbette, farklı bir takvim veya tarih kullanıyorsanız, bunu kolayca değiştirebilirsiniz. Mevcut takvimlerin ve takvim birimlerinin bir listesi NSCalendar
Sınıf Referansında bulunabilir . Hakkında daha fazla bilgi NSDateComponents
bulunabilir NSDateComponents
Sınıf Referans .
Referans olarak, bileşenlerden tek tek erişmek NSDateComponents
oldukça kolaydır:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
Dikkatli olmanız gerekir: NSDateComponents
bunları geçerli bilgilerle oluşturmadıkça (yani NSCalendar
bu bilgileri NSCalendarUnit
s sağlama talebi) istediğiniz herhangi bir alan için geçerli bilgi içermez . NSDateComponents
kendi başlarına hiçbir referans bilgisi içermez - bunlar sadece erişmeniz için sayıları tutan basit yapılardır. Ayrıca örneğin bir çağ almak istiyorsanız, dışarı NSDateComponents
, içinden jeneratör yöntemini beslemek gerekir NSCalendar
ile NSCalendarUnitEra
bayrak.