2010-08-19 18 views
10

Haftanın gününü nsdate'den alabilmem gerekiyor, aşağıdaki koda sahibim ve her zaman geri dönüyorum 1. Ayı değiştirmeye çalıştım, 1'den 12'ye kadar her şeyi denedim ama haftanın gününün sonucu her zaman 1'dir. Mac içinAmaç C - NSDate'den hafta içi gününü nasıl alabilirim?

NSDate *date2 = [[NSDate alloc] initWithString:[NSString stringWithFormat:@"%d-%d-%d", 2010, 6, 1]]; 
unsigned units2 = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit; 
NSCalendar *calendar2 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components2 = [calendar2 components:units2 fromDate:date2]; 
int startWeekDay = [components2 weekday]; 
[date2 release]; 
[calendar2 release]; 
+0

Muhtemel yinelenen [Haftanın gününü Cocoa Touch ile nasıl alabilirim?] (Http://stackoverflow.com/questions/4269093/how-do-i-get-the-day-of-the- hafta-kakao-touch) – Suhaib

cevap

6

Düzenleme:

dizenin biçimi -YYYY-AA-GG SS olmak zorunda: DD: HHMM ± SS docs göre, tüm alanlar zorunlu

Eski answe (IPhone için ve simülatör üzerinde test) r:

Orada NSDate hiçbir (kamu) -initWithString: yöntemdir ve ne geri verilmesinde beklediğiniz değil olduğunu.

Uygun bir şekilde yapılandırılmış (giriş biçimini vermeniz gerekir) NSDateFormatter ve -dateFromString: kullanın. Yalnızca hafta içi gününü içeren bir NSDateFormatter oluşturmak istediğinizi yapacağınız bir

+0

evet var> - initWithString: ve benim sorunum benim dize – aryaxt

+0

Ah biçiminde idi, üzgünüm, bu yoksun iPhone NSDate baktı. Cevabımı düzenliyorum ... – Eiko

43

. Eğer uluslararasılaşmayı gerekiyorsa

NSDate *now = [NSDate date]; 
NSDateFormatter *weekday = [[[NSDateFormatter alloc] init] autorelease]; 
[weekday setDateFormat: @"EEEE"]; 
NSLog(@"The day of the week is: %@", [weekday stringFromDate:now]); 

, NSDateFormatter uygun bir çeviri verecek bir yerel, gönderilebilir.

tarih formatlayıcılar

bu standardın aracılığıyla kontrol ediliyor: Ben sorunu çözüldü Unicode Date Formats

+0

OP'nin haftanın gününün bir tamsayı olmasını istediğini düşünüyorum (örneğin, 1 = Pazartesi, 2 = Salı, 3 = Çarşamba vb.). – dreamlax

+0

evet, – aryaxt

+2

için aradığım şey tamsayı istiyorsanız, yalnızca bir set istiyorsanız: [weekday setDateFormat: @ "e"]; Ayrıca NSLocale'yi de ayarlamanız gerekir ... ör .: NSLocale * deLocale = [[[NSLocale alloc] initWithLocaleIdentifier: @ "de_DE"] autorelease]; [weekday setLocale: deLocale]; Aksi taktirde, perşembe gününün Pazar günü veya Pazar günü olması halinde 4 yerine 5 olabilir. –

0

, sorun benim tarih dize biçimi yanlış olduğuydu:

NSDate *date = [[NSDate alloc] initWithString:[NSString stringWithFormat:@"%d-%d-%d 10:45:32 +0600", selectedYear, selectedMonth, selectedDay]]; 

beri umrumda değil zaman hakkında ben rastgele ben

kurulum bir NS için birçok yol vardır Xcode 6.4 kullanıyorum

0

dizesinin sonuna bir zaman geçirmek Tarihi. Buraya gitmeyeceğim. Bunu bir yolla yaptınız, bir dize (Hataya karşı çok savunmasız olmasından dolayı kaçınmam gereken bir yöntem) ve bunu başka bir şekilde ayarlıyorum. Yine de, bileşenlerinize hafta içi veya setDay yöntemlerine erişin. Tabii eğer bileşenleri değiştirdik sonra NSDate *date = [calendar dateFromComponents:components]; set,

[components weekday] //to get, then doSomething 
[components setDay:6]; //to set 

ve:

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 
[calendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]]; 
NSDateComponents *components = [calendar components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitWeekday|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond) fromDate:[NSDate date]]; 
    NSDate *date = [calendar dateFromComponents:components]; 

bu şekilde, almak ya böyle bu bileşenlerin herhangi ayarlayabilirsiniz.

Bunları da ayarlamak isterseniz, ek yerel ve diğer bileşenlere bağlam için ekledim.

Bu ücretsiz kod, çalma.