2012-01-30 3 views
0

J'ai le code suivant. Quand je l'exécute sur mon appareil iOS 3.1.3 (récupérez-le!) Cela fonctionne comme prévu, mais quand je le lance sur le simulateur (iOS 5 et 4.3), il est 1 minute et 15 secondes (9:01:15). Est-ce dû à mon code, à un bug dans le simulateur ou à un bogue dans iOS 4+?NSDateComponents agissant sur le simulateur

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[NSDate date]]; 
components.hour = 9; 
components.minute = 0; 
NSDate *date = [calendar dateFromComponents:components]; // <-- date is off on simulator 

Merci pour votre aide!

Répondre

2

Je ne comprends pas parfaitement pourquoi c'est le cas, mais cela se produit lorsque vous utilisez dateFromComponents: pour créer des dates il y a très longtemps. Plus précisément, le seuil semble être le 1er Décembre 1847. Tout ce qui est plus tôt que 12 heures ce jour-là semble être 1 minute 15 secondes au large.

Dans votre cas, cela se produit car si vous ne définissez que components.hour et components.minute, vous obtenez une date à partir du 1er janvier, 1AD.

Si vous définissez l'année, le mois et la date à quelque chose de plus récent, comme ceci:

components.year = 2012; 
components.month = 2; 
components.day = 6; 

vous obtiendrez alors la sortie droite (ce que je suis dans le simulateur iOS):

2012-02-06 09:00:00 +0000 
+0

Ah, ça le corrige. Merci! – jrtc27

+1

Peut-être parce que (selon Wikipedia) c'était quand les entreprises sont passées à une heure normale au Royaume-Uni (http://en.wikipedia.org/wiki/Railway_time#Great_Britain). – jrtc27

+0

Oups - oublié d'accepter votre réponse! – jrtc27

Questions connexes