2010-12-11 57 views
3

J'essaie de convertir une chaîne à partir d'un résultat d'API Twitter en un objet NSDate en utilisant NSDateFormatter. Ce que je trouve est que NSDateFormatter renvoie juste la date/heure actuelle de ma machine à la place. Toute aide serait grandement appréciée!NSDateFormatter - Problème lors de l'analyse de la date à partir de l'API JSON de Twitter

Voici ce que la chaîne ressemble à venir dans ma fonction:

Sam 11 Déc 2010 01:35:52 +0000

Et voici la fonction:

+(NSDate*)convertTwitterDateToNSDate:(NSString*)created_at 
{ 
    // Sat, 11 Dec 2010 01:35:52 +0000 
    static NSDateFormatter* df = nil; 

    df = [[NSDateFormatter alloc] init]; 
    [df setTimeStyle:NSDateFormatterFullStyle]; 
    [df setFormatterBehavior:NSDateFormatterBehavior10_4]; 
    [df setDateFormat:@"EEE, d LLL yyyy HH:mm:ss Z"]; 

    NSDate* convertedDate = [df dateFromString:created_at];  
    [df release]; 

    return convertedDate; 
} 

Et voici la date de retour:

2010-12-10 17:58:26 -0800

Ce qui se trouve être la date et l'heure de mon ordinateur en ce moment.

* Remarque! * a modifié la gestion de la mémoire en utilisant une autorelease lors de l'allocation de DateFormater à une version explicite de la fonction. En appelant cela dans une boucle géante, j'ai constaté qu'il a commencé à échouer avec l'autorelease (je devine que la partie auto ne se relâche pas assez vite), mais en changeant cela pour régler le problème.

+0

Pouvez-vous montrer le code qui appelle cette méthode et la façon dont vous affichez le résultat? – Anna

+1

Votre code fonctionne pour moi. Je vérifierais où vous avez affaire avec la valeur retournée. (Bien que votre code fuira un NSDateFormatter chaque fois qu'il est exécuté.) –

+0

Merci Steve, fuite de mémoire fixée! –

Répondre

1

Je pense est vrai. car la chaîne d'origine est dans le fuseau horaire +0000 et la date du résultat est dans le fuseau horaire -0800. Donc, si vous les regardez attentivement, vous remarquerez qu'il est en même temps.

Lorsque vous imprimez une date comme [date description] il sera imprimé dans le fuseau horaire local, je crois mais l'heure est absolue. Depuis NSDate contient seulement des secondes et pas des calendriers, pas des informations de fuseau horaire.

(chaîne imprimée est par rapport à la zone heure locale, mais la date réelle est absolue)

+0

Merci, je me sens comme si j'avais juste échoué une question d'entrevue :) Bonne chose que je suis un gestionnaire de programme et pas un développeur! –