2010-08-19 11 views
10

Ich muss in der Lage sein, den Wochentag von Nsdate zu bekommen, ich habe den folgenden Code und es immer zurück 1. Ich habe versucht, den Monat zu ändern, ich habe alles von 1 bis 12 versucht, aber das Ergebnis des Wochentages ist immer 1.Ziel C - Wie kann ich den Wochentag von NSDate bekommen?

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

Mögliches Duplikat von [Wie bekomme ich den Wochentag mit Cocoa Touch?] (Http://stackoverflow.com/questions/4269093/how-do-i-get-the-day-of-the- woche-mit-kakao-touch) – Suhaib

Antwort

6

Edit für Mac:

Das Format der Zeichenfolge hat -YYYY-MM-DD HH sein: MM: SS ± SSMM auf die docs nach, werden alle Felder Pflicht

Alte answe r (für iPhone und getestet auf Simulator):

Es gibt keine (öffentliche) -initWithString: Methode in NSDate, und was man bekommt zurück ist nicht was Sie erwarten.

Verwenden Sie eine richtig konfigurierte (Sie müssen das Eingabeformat geben) NSDateFormatter und -dateFromString:.

+0

ja es gibt> - initWithString: und mein problem war das format meiner string – aryaxt

+0

Ah sorry, sah im iPhone NSDate was fehlt. Ich bearbeite meine Antwort ... – Eiko

43

Erstellen Sie eine NSDateFormatter, die nur den Wochentag enthält, was Sie wollen.

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

Wenn Sie Internationalisierung benötigen, die NSDateFormatter ein Gebietsschema gesendet werden, die die korrekte Übersetzung geben wird.

Das Datum Formatierer durch diese Norm kontrolliert werden: Unicode Date Formats

+0

Ich denke, das OP möchte eine ganze Zahl des Wochentages (zum Beispiel 1 = Montag, 2 = Dienstag, 3 = Mittwoch, usw.). – dreamlax

+0

Ja, das ist, was ich gesucht habe – aryaxt

+2

Wenn Sie die ganze Zahl wollen Sie nur eine Menge: [wochentag setDateFormat: @ "e"]; Sie sollten auch NSLocale festlegen ... zB: NSLocale * deLocale = [[[[NSLocale alloc] initWithLocaleIdentifier: @ "de_DE"] autorelease]; [Wochentag setLocale: deLocale]; Sonst könnte Donnerstag 5 statt 4 sein, wenn der Starttag der Woche Sonntag oder Montag ist. –

0

ich das Problem gelöst wurde das Problem, dass das Format meines Datums-Zeichenfolge falsch war:

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

und da ist mir egal, etwa zu der Zeit zufällig eine Zeit bis zum Ende der i I Xcode bin mit

6.4
0

String übergeben

Es gibt viele Möglichkeiten zur Einrichtung eines NS Datum. Ich werde das hier nicht besprechen. Sie haben es auf eine Art und Weise getan, indem Sie eine Zeichenkette verwenden (Eine Methode, die ich vermeide, da sie sehr anfällig für Fehler ist), und ich setze es auf eine andere Art und Weise. Unabhängig davon, greifen Sie auf Ihre Komponenten Wochentag oder setDay Methoden zu.

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]; 

diese Weise können Sie eine dieser Komponenten wie diese erhalten oder setzen:

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

und natürlich setzen NSDate *date = [calendar dateFromComponents:components]; erst, nachdem Sie die Komponenten geändert haben.

Ich habe die zusätzlichen lokalen und andere Komponenten für den Kontext hinzugefügt, falls Sie diese auch setzen möchten.

Es ist freier Code, klopf es nicht.

Verwandte Themen