NSDate date Methode liefert Falsches Ergebnis
Ich weiß es gibt viele Fragen dieser Art, aber ich habe nicht finden die Lösung für meinen Fall;
Ich brauche, um die aktuellen und richtigen NSDate
Objekt, nicht NSString
!
Dieser code gibt falschen Zeit (+3 Stunden), weil ich bin aus der Ukraine.
NSDate *currentDate = [NSDate date];
Wie man aktuelle NSDate
Objekt aus NSDateFormatter
? Ich weiß nur, wie man NSString
, aber ich brauche es nicht.
EDIT: ich bin mit diesem code zu vergleichen 2 NSDates
mit NSCalendar
Objekt, hier ist der code:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *components = [calendar components:unitFlags fromDate:nowDate toDate:endDate options:0];
sowie components.hour
zeigt mir +3 Stunden Unterschied
Zeige den code, wie Sie erhalten
zu Testzwecken könnten Sie Ihre setup ändern Sie die Zeitzone Ihres mac nach london, um zu sehen, dass der Unterschied verschwunden sein wird (oder vielleicht 1 wegen Sommerzeit) in Ihrem simulator
nowDate
und endDate
zu Testzwecken könnten Sie Ihre setup ändern Sie die Zeitzone Ihres mac nach london, um zu sehen, dass der Unterschied verschwunden sein wird (oder vielleicht 1 wegen Sommerzeit) in Ihrem simulator
InformationsquelleAutor Timur Mustafaev | 2012-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
NSDates sind immer in UTC gespeichert, der tatsächlich die Termine selbst nicht wissen, etwas über Zeitzonen oder Wochen, Monat, Jahre. Sie sind nur ein Punkt in der Zeit.
Die richtige Zeit, deiner position auf der Erdoberfläche, die Sie benötigen, um die NSCalendar, für Ihre Zeit-Modell in Konto. Sie können es verwenden, direkt und Durcheinander herum mit Ihren Daten, oder erstellen Sie ein NSDateFormatter verlassen, dass die Daten unangetastet, aber passen deren Erscheinungsbild an Ihre Bedürfnisse an.
Ergebnisse in
Antwort auf den Kommentar:
versuchen, diesen code als test
werden Sie feststellen, dass der start in den Tag, Woche, Monat und Jahr eingestellt werden, um Ihre lokale Zeit, als das jeweils erste der NSLog-pair-Mädchen geben Sie das Datum in UTC und die zweite Sie in Ihrer lokalen Zeitzone.
auf den chat, in dem du gepostet diesen code
also das problem ist, dass Sie die datestring-ist tatsächlich nicht von der GMT, aber EET (Eastern European Time)
versuchen
aber die mit Abstand eleganteste Lösung wäre die datestring-mit den offset zur UTC, ähnlich
2012-07-12 12:23:00 +0300
wenn einige, wie möglich.In einem solchen Fall könnten Sie analysieren es mit
[dateFormat setDateFormat:@"yyyy-mm-dd HH:mm:ss Z"];
und brauchen nicht weitere Zeit-zone Handhabung, wie das Formatierungsprogramm kennt den offset über die
Z
-Planer.Beachten Sie auch, dass, wenn Sie nicht festlegen, jede Zeitzone, die für das Gerät aktuell verwendet werden soll. Wenn der Benutzer ist immer in der gleichen Zeitzone wie die Zeit, aus der Datum-string, das sollte auch funktionieren. Aber wenn der Benutzer verlässt die zone, oder Sie inted zu haben, es funktioniert weltweit, Sie sollten verwenden Sie eine der Lösungen, die ich Ihnen gab. Mit dem zweiten (mit Angabe der Zeitzone in den datestring) als den bevorzugten ein.
Ihre nsdate-Objekten wird nur gut funktionieren.
Aber Sie geben mir falsche Zeit, wenn ich Komponenten.Stunde von NSDateComponents 🙂
siehe mein test-code, den ich gepostet.
Nein, tut mir Leid, ich muss gehen. fügen Sie bitte das Datum der Erstellung der codes zu Ihren Fragen, da ich denke, dass Sie erstellt werden und in unterschiedlichen Zeitzonen.
InformationsquelleAutor vikingosegundo
Datum hat wahrscheinlich den richtigen Wert; vielleicht denken Sie, es ist falsch, weil es falsch aussieht, wenn Sie sich anmelden? Dies ist, weil, wenn Sie sich anmelden, es zeigt das Datum im UTC-Format. Sie können die Zeichenfolge in Ihre lokale Zeitzone von mit ein NSDateFormatter.
Bitte, Blick auf Bearbeiteten code, was sagen Sie jetzt? Problem ist nicht es-Gerät oder simulator
Nun, was sind nowDate und endDate?
Jetzt Datum:(18:04) durch meine Zeit und Ende Zeit ist 2012-08-15 00:00
InformationsquelleAutor Jesse Rusak
Die Antwort ist richtig, wenn das zweite Datum ist in UTC. Die Ukraine ist aktuell 3 Stunden vor der UTC, also Mitternacht UTC ist um 21:00 in der Ukraine. 21:00 Uhr - 18:00 Uhr 3 Stunden. So prüfen Sie, wie Sie erhalten das zweite Datum. Der falschen Zeitzone ist wahrscheinlich angegeben wird.
Wenn das erste date wirklich wurde geschaffen, um 18:00 Ukraine-Zeit über
dann das zweite Datum ist wirklich 21:00 Ukraine-Zeit, das entspricht Mitternacht UTC. Da Sie behaupten, es ist Mitternacht, müssen Sie verwendet haben, UTC, um es zu schaffen aus einem string - entweder implizit oder explizit. Zeigen Sie uns, wie Sie es erstellt haben.
** EDIT **
Code, den Sie gab mir auf chat, ist dies:
Die Dritte Zeile setzen Sie die Zeitzone auf GMT, die ist identisch mit der UTC-für alle Absichten und Zwecke. Ihr date formatter ist wahrscheinlich initialisiert werden, um das richtige Gebietsschema für das Gerät und damit vermutlich können Sie einfach lassen Sie diese Zeile aus.
keine Zeit-Zonen. Sie sind immer in UTC, also, wenn Sie es erstellt haben, aus einem string sagen, Sie entweder in UTC angegeben oder implizit angegeben, UTC.
Zweiten date habe ich von NSString mit NSDateFormatter, bitte, laßt sprechen hier chat.stackoverflow.com/rooms/13796/... ich werde zeigen , Sie Codes
InformationsquelleAutor JeremyP