2011-07-19 3 views
4

Voici mon code.Pourquoi NSDate signale une date erronée?

NSDate *today = [NSDate date];   
NSString *todayString = [[today description] substringToIndex:10]; 
NSLog(@"Today: %@", todayString); 

Je reçois le 2011-07-19 au lieu du 2011-07-18. Des idées sur ce qui pourrait être le problème?

+0

Quel est le fuseau horaire dans lequel vous vous trouvez et quel est le fuseau horaire de l'appareil dont vous obtenez la date? –

+0

vérifie également l'heure système réelle du serveur dans le système d'exploitation. – Randy

+0

Mon fuseau horaire est défini sur le fuseau horaire de l'Est. La date actuelle sur mon Mac est le "lundi 18 juillet 2011". En outre, je cours mon application dans le simulateur. – David

Répondre

10

La méthode description de NSDate renvoie des heures en UTC, qui si vous vous trouvez dans le fuseau horaire de l'Est des États-Unis pendant l'heure d'été est 4 heures plus tard que l'heure de votre horloge murale. En d'autres termes, à 22 heures, il est 2 heures du matin le jour suivant en UTC.

La méthode habituelle consiste à utiliser NSDateFormatter à la place, et de définir explicitement le fuseau horaire si nécessaire.

+0

Ça a arrangé ça pour moi. Merci. – David

7
NSDate *today = [NSDate date]; 
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormat setDateFormat:@"dd-MM-yyyy"]; 
NSString *dateString = [dateFormat stringFromDate:today]; 
+0

Merci, c'est exactement ce que j'ai fait. – David

Questions connexes