2016-06-30 2 views
1

Ich habe dieses Problem, wo die richtige Zeit verstrichen ist, aber sobald es die [formatter setDateFormat:date] trifft, kommt es in einer anderen Zeitzone heraus. Hier ist ein AusschnittKonvertieren Sie Zeit in Ortszeit in Objective-C

NSDate* date = user.startDate; 
NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
NSLog(@"-------> (1) time is %@", date); 
NSLog(@"-------> (2) time is %@", date); 
[format setDateFormat:@"h:mm a"]; 
NSLog(@"-------> (3) time is %@", date); 
NSLog(@"-------> (4) time is %@", [format stringFromDate:date]); 

Hier wird der Debugger-Ausgabe für die Log-Meldungen

-------> (1) time is 2016-06-30 09:25:17 +0000 
-------> (2) time is 2016-06-30 09:25:17 +0000 
-------> (3) time is 2016-06-30 09:25:17 +0000 
-------> (4) time is 2:25 AM 

ich die Ausgabe für (4) erwarten sein time is 9:25 AM

+0

Ich entfernte Code, der für Ihre Frage irrelevant ist (die doppelten Zeilen wurden jedoch beibehalten, damit die Referenzen in den Antworten gültig bleiben). – Eiko

+0

Beachten Sie, dass (1), (2), (3) genau das Gleiche tun. Das Datum ist unveränderlich und die gleiche Instanz, und Sie verwenden keinen Formatierer. – Eiko

Antwort

1

Ihre Zeitzone ist offenbar UTC-7000.

NSLog druckt NSDate immer in UTC-Objekte hält NSDateFormatter die aktuelle Zeitzone. Die gedruckten Daten sind eigentlich gleich.

Wenn Sie wirklich alle Daten in UTC benötigen, legen Sie die Zeitzone des Formatierungsprogramms fest.

Übrigens: Es gibt eingebaute Methoden, um zu überprüfen, ob ein Datum heute oder gestern ist.

1

Hier ist, was los ist: das Protokoll eines Datums wird immer GMT sein. (Ich denke nicht, dass es für mich Sinn macht, ins Detail zu gehen, da es eine großartige Erklärung gibt here.) Das bedeutet, dass Log 1, 2 und 3 "falsch" sind (nicht in Ihrer Zeitzone) und das sollte erwartet werden.

Wenn Sie zum Beispiel die Zeichenfolge als GMT protokollieren möchten, können Sie die Eigenschaft timeZone Ihres Datumsformatierers ändern.

Umgang mit Daten kann sehr schwierig sein. Bitte nehmen Sie sich die Zeit zu lesen, wenn nicht alle, einige wichtige Teile von this Dokument (Grundlagen/Grundlagen).