2 votes

résultat inattendu de dateFromComponents :

Le code suivant

NSCalendar *cal = [NSCalendar currentCalendar];
[cal setFirstWeekday:2];
[cal setMinimumDaysInFirstWeek:4];

NSDateComponents *comp = [[NSDateComponents alloc] init];
[comp setYear: 2012];
[comp setMonth:3];
[comp setDay: 12];
NSDate *date = [cal dateFromComponents:comp];
NSLog(@"date:%@",date);

journaux :

date:2012-03-11 23:00:00 +0000

Une idée, pourquoi cela se produit-il et comment l'éviter ? Tnx

2voto

Krumelur Points 8935

Je suppose que vous utilisez le fuseau horaire CET localement. C'est ce que le [NSCalendar currentCalendar] sera alors utilisé comme fuseau horaire.

Quand on jette un NSDate avec NSLog, vous obtiendrez la date dans sa forme UTC brute. Pour imprimer la date en utilisant un format local, regardez dans la fonction NSDateFormatter qui possède une classe timeZone propriété :

....
NSDate *date = [cal dateFromComponents:comp];
NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
fmt.timeZone = [NSTimeZone defaultTimeZone]; // Probably not required
NSLog(@"date:%@", [fmt stringFromDate:date]);

2voto

Parag Bafna Points 10462

Définir le fuseau horaire

NSCalendar *cal = [NSCalendar currentCalendar];

[cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

2voto

grahamparks Points 10187

Lorsque vous appelez dateFromComponents: vous perdez toutes les informations relatives au fuseau horaire et au calendrier et vous vous retrouvez avec un objet NSDate qui contient le moment dans le temps que vos composants de date représentent, mais rien d'autre. Lorsque vous utilisez NSLog sur votre objet NSDate, cet instant est converti en heure UTC et rendu sous forme de chaîne lisible par l'homme.

Vous devez fournir plus d'informations sur ce que vous essayez d'obtenir pour pouvoir répondre à votre deuxième question, à savoir comment éviter cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X