2010-12-11 4 views
3

Ich versuche, eine Zeichenfolge aus einem Twitter-API-Ergebnis in ein NSDate-Objekt mit NSDateFormatter zu konvertieren. Was ich finde, ist, dass der NSDateFormatter nur das aktuelle Datum/die Uhrzeit meines Computers zurückgibt. Jede Hilfe würde sehr geschätzt werden!NSDateFormatter - Problem Parsing Datum von Twitter JSON API

Hier ist, was die Saite wie kommt in meiner Funktion aussieht:

Sa 11 Dez 2010 01:35:52 +0000

Und hier ist die Funktion:

+(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; 
} 

Und hier ist das Datum:

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

Welches Datum und welche Uhrzeit meines Computers gerade ist.

* Hinweis! * hat die Speicherverwaltung von der Verwendung einer Autorelease beim Zuweisen des DateFormaters zu einer expliziten Freigabe in der Funktion geändert. Als ich dies in einer riesigen Schleife anrief, stellte ich fest, dass es mit der Autorelease fehlgeschlagen ist (ich nehme an, der Autoteil wurde nicht schnell genug freigegeben), aber das Problem wurde dadurch behoben.

+0

Können Sie den Code zeigen, der diese Methode aufruft und wie Sie das Ergebnis sind die Anzeige? – Anna

+1

Ihr Code funktioniert für mich. Ich würde prüfen, wo Sie mit dem zurückgegebenen Wert zu tun haben. (Obwohl Ihr Code jedes Mal einen NSDateFormatter ausgibt, wenn er ausgeführt wird.) –

+0

Danke steve, Speicherleck behoben! –

Antwort

1

Ich denke, ist richtig. weil die ursprüngliche Zeichenfolge in der Zeitzone +0000 liegt und das Ergebnisdatum in der Zeitzone -0800 liegt. Also, wenn Sie sie sorgfältig betrachten, werden Sie bemerken, dass es die gleiche Zeit ist.

Wenn Sie ein Datum wie [Datumsbeschreibung] drucken, wird es in der lokalen Zeitzone gedruckt, ich glaube aber die Zeit ist absolut. Da NSDate nur Sekunden und keine Kalender enthält, keine Zeitzoneninformationen.

(gedruckte Zeichenfolge ist in Bezug auf die lokale Zeitzone aber das eigentliche Datum ist absolut)

+0

Vielen Dank, ich habe das Gefühl, dass ich gerade eine Interviewfrage nicht bestanden habe :) Gut, dass ich Programmmanager bin und kein Entwickler! –