2010-07-20 7 views
3

J'ai un format de date très étrange qui vient à moi via JSON. par exemple. - "Juillet 18 2010 02:22:09"NSDateFormatter, NSDate, UTC et format de date étrange

Ces dates sont toujours UTC. Je suis la date avec l'analyse syntaxique NSDateFormatter, et la mise en fuseauHoraire à UTC ...

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
[inputFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
[inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]]; 
[inputFormatter setDateFormat:@"MMMM, dd yyyy HH:mm:ss"]; 
NSDate *formatterDate = [inputFormatter dateFromString:dtStr]; 

Cependant, la date à laquelle est connecté apparaît avec le décalage de mon appareil ...

« 2010-07 -18 02:22:09 -0600 "

Qu'est-ce que je fais mal ici?

Répondre

2

Je pense que c'est parce que votre NSDate n'utilise pas le fuseau horaire UTC. Les docs disent ceci au sujet de la méthode de description de NSDate:

Une représentation de chaîne du récepteur dans le format international AAAA-MM-JJ HH: MM: SS ± HHMM, où ± HHMM représente le fuseau horaire de décalage en heures et minutes de GMT (par exemple, "2001-03-24 10:45:32 +0600").

Donc, vous ne faites vraiment rien de mal. NSDate se comporte comme prévu. Qu'est-ce que vous essayez d'accomplir? Avez-vous besoin de la date dans une chaîne? Est-ce que vous faites une comparaison de date?

+0

Merci. Tu as raison. C'est juste déroutant de l'avoir montrer un décalage lorsque NSDate ne stocke pas d'informations de fuseau horaire. –

+0

Pas seulement les informations de fuseau horaire, mais le format. Il n'a aucune idée de comment il a été créé; il ne sait pas qu'il a été créé à partir d'une date US format long, ni qu'il a été créé avec l'heure en UTC. C'est pourquoi la description est en heure locale et au format ISO 8601: c'est ainsi que chaque date se décrit, quelle que soit la façon dont elle a été créée. Pour obtenir la date représentée dans un format spécifique et/ou dans un fuseau horaire spécifique, vous devez utiliser un formateur pour représenter la date, l'inverse de la façon dont vous avez utilisé un formateur pour analyser la date. –

+0

et si nous avons besoin de ce format "2010-07-18 02:22:09 +0000", comment pouvons-nous obtenir cela? – Maystro

Questions connexes