2010-02-01 3 views
2

Je développe une application pour l'iPhone où je dois convertir une date à partir d'un flux XML en un format HH: MM.NSDateFormatter et la conversion de date ne fonctionne pas

J'ai la méthode suivante qui ne fonctionne pas et je n'ai aucune idée de ce que je fais mal.

À titre d'exemple, la chaîne de timeToConvert serait: "Mon , 1 février 2010 21:55:00 +0100" (sans les guillemets)

La méthode fonctionne lorsque la région est définie US (Je récupère la date correcte), mais pas quand je change la région (dans Paramètres-> Général-> International) en Espagne, ou dans d'autres régions (dans ce cas je reviens nul). Toute indication sur la raison pour laquelle cela ne fonctionne pas et le retour de la valeur NULL seront les bienvenues.

+0

Est-ce que vous obtenez une erreur ou est-ce qu'elle renvoie les mauvaises heures? – DyingCactus

+0

Just returns NULL ... ressemble à tout fonctionne jusqu'à formatedDate = [originalDateFormatter dateFromString: newPubDate]; –

+0

Le code fonctionne pour moi, sauf qu'il renvoie l'heure convertie à mon fuseau horaire local. Quelle est la valeur de formatedDate lorsque vous lui passez la chaîne de l'exemple? – DyingCactus

Répondre

12

Le problème semble être que le paramètre de votre région n'est pas "en-US", donc le formateur de date n'analyse pas la chaîne en utilisant le format en-US fourni. Bien qu'il puisse y avoir une solution plus élégante et générale, faire un setLocale sur originalDateFormatter à en_US peut être utilisé comme une solution de contournement pour résoudre le problème.

Comme vous l'avez déjà essayé dans votre code:

[originalDateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]]; 
2

J'ai eu exactement le même problème. Mon problème était que ma chaîne de date initiale avait un caractère milliseconde:

Exemple: 2011-02-06 08:13:22:1

et était en cours d'analyse avec ce format: [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

Le simulateur d'iPhone a été clément et analysé avec succès la date de la millisecondes, mais lors de la construction de mon iPhone, il n'a pas.
Modification du formateur à: [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.S"]; a résolu le problème.

Questions connexes