2010-08-19 17 views
10

Je dois être en mesure d'obtenir le jour de nsdate, j'ai le code suivant et il revient toujours 1. J'ai essayé de changer le mois, j'ai tout essayé de 1 à 12 mais le résultat de la semaine est toujours 1.Objectif C - Comment puis-je obtenir le jour de la semaine de NSDate?

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

Copie possible de [Comment obtenir le jour de la semaine avec Cocoa Touch?] (Http://stackoverflow.com/questions/4269093/how-do-i-get-the-day-of-the-day week-with-cacao-touch) – Suhaib

Répondre

6

Modifier pour Mac:

le format de la chaîne doit être -YYYY-MM-JJ HH: MM: SS ± HHMM selon les documents, tous les champs obligatoires

Vieille réponse r (pour iPhone et testé sur simulateur):

Il n'y a pas de méthode (public) -initWithString: à NSDate, et ce que vous obtenez est retourné pas ce que vous attendez.

Utilisez une configuration correcte (vous devez indiquer le format d'entrée) NSDateFormatter et -dateFromString:.

+0

oui il y a> - initWithString: et mon problème était le format de ma chaîne – aryaxt

+0

Ah désolé, regardé dans l'iPhone NSDate qui manque de cela. Je modifie ma réponse ... – Eiko

43

La création d'un NSDateFormatter qui contient uniquement le jour de la semaine fera ce que vous voulez.

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

Si vous avez besoin d'internationalisation, le NSDateFormatter peut être envoyé un lieu, qui donnera la traduction.

La date formatteurs sont contrôlés par cette norme: Unicode Date Formats

+0

Je pense que l'OP veut un entier du jour de la semaine (par exemple, 1 = lundi, 2 = mardi, 3 = mercredi, etc.). – dreamlax

+0

oui, c'est ce que je cherchais – aryaxt

+2

Si vous voulez le nombre entier vous juste un ensemble: [en semaine setDateFormat: @ "e"]; Vous devez également définir NSLocale ... par exemple: NSLocale * deLocale = [[[NSLocale alloc] initWithLocaleIdentifier: @ "de_DE"] autorelease]; [journal setLocale: deLocale]; Sinon jeudi peut être 5 au lieu de 4, si le jour de départ de la semaine est dimanche ou lundi. –

0

J'ai résolu le problème, le problème est que le format de ma chaîne de date était erronée:

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

et depuis que je ne se soucient pas au moment où je passe au hasard une fois à la fin de la chaîne

0

J'utilise Xcode 6.4

Il y a plusieurs façons de configurer un NS Rendez-vous amoureux. Je ne reviendrai pas sur ça ici. Vous l'avez fait d'une certaine manière, en utilisant une chaîne de caractères (une méthode que j'évite parce qu'elle est très vulnérable aux erreurs), et je la règle différemment. Peu importe, accédez à vos composants components ou aux méthodes setDay.

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

cette façon, vous pouvez obtenir ou définir un de ces composants comme ceci:

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

et, bien sûr, mis NSDate *date = [calendar dateFromComponents:components]; seulement après que vous avez changé les composants.

J'ai ajouté dans le contexte local et d'autres composants pour le contexte au cas où vous souhaitez les définir aussi.

C'est du code libre, ne le cognez pas.