In Cocoa, wie verwende ich NSTimeZone die Systemzeitzone als String-Offset zu bekommen?
-
20-08-2019 - |
Frage
Für PDT, würde ich "-0700" will.
Ich bin ein Datum in der Vergangenheit immer zu bestimmen, wie lange es her war etwas passiert.
NSDate *then = [NSDate dateWithString:@"1976-04-01 12:34:56 -0700"]; // Note the hard-coded time zone at the end
werde ich die Datumszeichenfolge an einem anderen Ort der Konstruktion, aber ich weiß nicht, wie die lokale Zeitzone zu gelangen.
Ich lese die Apple-Daten und Zeiten die Programmierung für Kakao sowie die NSTimeZone und NSDate Klasse Referenzen, aber es ist einfach zu schwer für mich, die Informationen zusammen zu stellen. Ich könnte wirklich ein paar Zeilen Code verwenden, nur um zu zeigen, wie es verwendet wird.
Aktualisieren : Während kämpfen mit diesem, ich war das Schreiben von Code ein Command Line-Vorlage, so konnte ich die Dinge schnell versuchen. Ich habe gerade versucht, meine vorherigen Code auf dem iPhone und ich bin immer NSDate kann reagieren nicht auf ‚+ dateWithString:‘. Sorry, wenn das zur Verwirrung hinzugefügt, die sich Apple eine solche Basisklasse ändern sich wusste, dass
Lösung
Die Offset-Zeitzone ist am Tag abhängig in vielen Teilen der Welt-die Teile davon, die Sommerzeit / Sommerzeit verwenden.
Der einzig richtige Weg ist, um die gesamte Zeichenfolge von Datum und Zeitzone zusammen zu erzeugen. Verwenden Sie NSDateFormatter hierfür.
Andere Tipps
Mit NSDateFormatter
bauen NSDate aus einem String:
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSDate *formatterDate;
formatterDate = [inputFormatter dateFromString:@"1976-04-01 12:34:56 -0700"];
NSString *dateString = [inputFormatter stringFromDate:formatterDate];
NSLog(@"date:%@", dateString);
So können Sie die lokale Zeit von String zu erhalten, zum Beispiel das Datum durch die Zeichenfolge angegeben:
"1976.04.01 00.34.56 -0700"
ist in der Zeitzone -0700
, (Ich bin in der Zeitzone GMT +1000), so erhalte ich:
2009-11-17 22: 13: 46,480 cmdline [10593: 903] Datum: 1976.04.02 05.34.56 +1000
Der beste Weg ist, um wahrscheinlich einen einfachen Kalender Formatierer verwenden
NSCalendarDate * date = [NSCalendarDate calendarDate];
[date setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"PDT"]];
NSLog([date descriptionWithCalendarFormat:@"%z"]);
das wird ausgegeben '-0700'
oder die zweite Zeile auslassen, wenn Sie die aktuelle Zeitzone des Systems (nicht sicher, was Sie fragen) wollen