NSDate äußert sich in verschiedenen Zeitzonen, d.h. die lokale Zeitzone (GMT-400) zu PST
Ich weiß, wie Sie NSTimeZone zur Ableitung der offset für die aktuelle Uhrzeit in einer anderen Zeitzone. NSDate gibt immer relativ zu GMT, also wie kann ich daraus einen string mit der richtigen Zeit-zone Informationen? also nehme ich die aktuelle Zeit, wo ich bin (EST) und mit NSTimeZone am Ende nach Abzug der 3 Stunden notwendig, stellen Sie die Uhrzeit in PST. Aber alles, was ich getan habe, ist zu subtrahieren 3 Stunden von der Zeit, die ist noch dargestellt, relativ zu meiner Zeit-zone. Wie bekomme ich NSDateFormatter ausspucken der Zeit, mit dem Ziel Zeit-zone?
Einer Wende, die ich versuchte, war:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)]; //for PST
NSDateComponents *dc = [cal components: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:now];
[cal setTimeZone:tz];
NSDate *newDate = [cal dateFromComponents:dc];
Keine Liebe. Ich könnte die einzelnen Komponenten Datum und Komponieren ein string, aber es wäre nicht lokalisierbar.
Einem verwandten problem:
NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)]; //for PST
NSString *abbreviation = [tz abbreviation];
NSString *name = [tz name];
Beide abbreviation
und name
am Ende der Rückkehr GMT-0800
, nicht PST-als ich erwarten würde. So konnte ich auch nicht mehr tun oben, wenn ich wollte. Was mache ich falsch?
InformationsquelleAutor rsswtmr | 2010-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist dies nicht sinnvoll. NSDate nur kapselt ein absolutes moment in der Zeit (vergessen wir die Relativitätstheorie für eine Sekunde) und es hat kein Konzept von Zeitzonen löschen. Zu sagen, dass NSDate Zeiten sind relativ zu GMT ist falsch.
Zur Ausgabe eines Datum in einer bestimmten Zeit-zone, erstellen Sie eine Instanz von
NSDateFormatter
- und call -setTimeZone:
auf Sie, um die Zeitzone einzustellen. Nach der Unicode-docs den format-string@"zzz"
sollten output-Wert für die Zeitzone als "PST".Hm, vielleicht NSDateFormatter erkennt nur diese Zeit-zone Formatbezeichner bei der Konvertierung eines Datums-string zu NSDate und nicht die andere Weise herum? Die Unicode-Spezifikationen, die ich im Zusammenhang mit oben scheinen die Praktiker geben eine Menge Spielraum, wie Sie zur Anzeige time zone info, wenn Zeitzonen-Namen sind nicht verfügbar. Ich weiß wirklich nicht, wie es im detail funktioniert. Und googeln nicht entdecken viel, entweder.
Ich experimentierte ein wenig und fand heraus, dass der format-string
@"zzz"
wird in der Tat Ausgang "PDT" (für das heutige Datum). Dies wird jedoch nur funktionieren, wenn die Zeitzone, die Sie für die Datums-formatter erstellt wurde, mit einem Namen oder eine Abkürzung, die statt nur die Anzahl der Sekunden von GMT:[NSTimeZone timeZoneWithAbbreviation:@"PST"]
. Ich denke, das macht Sinn, da das system sonst keine Möglichkeit hat, zu sagen, welche spezifischen Zeitzone du meinst. Ich hatte auch zum einstellen des Datums-formatter-Gebietsschema "en-US" explizit.Ja, es wurde darauf hingewiesen, zu mir gestern, dass die GMT-05:00 Uhr, könnte genauso leicht darstellen Peru Zeit oder die Columbia-Zeit sowie die Eastern Standard Time. Wieder, don ' T wissen, warum Sie nicht auftreten, zu mir. Der einzige Zeit-zone Informationen, die ich bekommen von unseren Servern Stunden offset from GMT, also ich denke, wir müssen uns auf die schöne Zeit-zone Beschreibung. Vielen Dank für Ihre Hilfe.
InformationsquelleAutor Ole Begemann