Question

J'ai ce code:

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2011];
[components setDay:1];
[components setMonth:4];
NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *firstDate = [gregorianCalendar dateFromComponents:components];
NSLog(@"date:%@", firstDate);

Le résultat dans la console est:

date:2011-03-31

Pourquoi???? Si je définis "Setday: 1" Ce serait "Date: 2011-04-01", non?

Était-ce utile?

La solution

Je pense que cela pourrait être un problème lié au fuseau horaire. Assurez-vous de définir votre fuseau horaire sur NSDateComponents:

[ components setTimeZone:[ NSTimeZone systemTimeZone ] ] ;

Autres conseils

Cela dépend également du formatage de la date. Mes dates avaient 1 an pour YYYY Et je le change en yyyy (minuscules) Ensuite, il a été fixé. Faites attention à cela.

Essayer:

   [components setWeekdayOrdinal:1]; // The first day in the month

Des documents NSDateComponents:

Vous pouvez configurer une instance de NSDateComponents pour spécifier les composants d'une date, puis utiliser la date de la méthode NSCALENDAR DATEFromComponents: pour créer l'objet de date correspondant. Vous pouvez fournir autant de composants que vous en avez besoin (ou choisir). Lorsqu'il existe des informations incomplètes pour calculer un temps absolu, les valeurs par défaut telles que 0 et 1 sont généralement choisies par un calendrier, mais il s'agit d'un choix spécifique au calendrier. Si vous fournissez des informations incohérentes, une désambiguïsation spécifique au calendrier est effectuée (ce qui peut impliquer d'ignorer un ou plusieurs des paramètres).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top