Korrektur der Uhrzeit für die Sommerzeit in rails DateTime.analysieren
Nur das hinzufügen, um die Millionen Fragen über Zeitzonen und Sommerzeit Probleme gibt.
Ich habe ein Formular mit separaten Feldern für Datum und Zeit, die ich kombinieren, um ein DateTime-wie so
start_time = DateTime.parse("#{parse_date(form_date)} #{form_start_time} #{Time.zone}")
Wenn fülle ich mein Formular mit 21 Aug 2012 15:00, dann sind die Werte, die ich sehe, wenn ich laden meine form. Wenn ich dann schau dir meine start_time-Attribut in meinem Modell ist es richtig eingestellt Tue, 21 Aug 2012 15:00:00 EST +10:00
.
Das problem, das ich habe tritt auf, wenn ich ein Datum später in diesem Jahr, sobald die Sommerzeit beginnt in (ich bin in Australien). Wenn ich mit 21 Dec 2012 15:00 dann check start_time ich sehe Fri, 21 Dec 2012 16:00:00 EST +11:00
.
Meine interpretation des Problems ist, dass das Datum gespeichert wird in meiner aktuellen Zeitzone (+10:00) wie das ist, was ich gesagt habe, DateTime.Parsen zu tun. Jedoch, wenn der Wert zurückgegeben, Schienen auf der Suche auf das Datum und sagt: "hey, es ist Sommerzeit im Dezember' und die Rückkehr der Zeit, in der +11:00 Uhr Zeitzone.
Was ich tun möchte, sagen, DateTime.analysieren, um die Zeit in der +11:00 Zeit-zone, wenn DST in Kraft ist. Klar die Zeit.zone in meinem string nicht erreichen. Gibt es eine einfache Möglichkeit, dies zu tun? Ich kann sehen, Möglichkeiten, es zu tun mit Zeit#dst? aber ich vermute, dass dies zu schaffen, einige wirklich hässlich verworrene code. Ich dachte, es könnte sein, gebaut in der Weise, dass ich bin fehlt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Antwort für Schienen 4.2.4, nicht überprüfen, für ältere oder neuere Versionen)
Anstelle der Verwendung von fixed shift +01:00, +02:00, etc, empfehle ich die Nutzung der
in_time_zone
String-Methode, die mit time zone name als argument :Sommer :
Winter :
String#in_time_zone
ist das äquivalent von :Können Sie die Zeitzone-Namen :
Oder in der rails-Konsole :
Oder build-Sammlung für das select-tag :
Ab und speichern die Zeitzone den Namen statt der Umschalttaste.
Hinweis : nicht zu verwechseln
String#in_time_zone
- Methode und dieTime#in_time_zone
Methode.sollten Sie die Zeitzone, die für mein system ist "Paris".
Hier ist meine Lösung so weit. Ich hoffe jemand hat eine bessere.
Scheint es zu funktionieren, aber ich habe nicht rigoros getestet. Ich vermute, es könnte sein, prettied und verkürzt, aber ich denke, das ist lesbar und verständlich. Irgendwelche Verbesserungen?
Lief ich in genau dieses Problem. Meine app ermöglicht es Benutzern finden Sie unter Veranstaltungen. In den USA fallen wir von Sommerzeit auf 2. November und alle Veranstaltungen auf und nach diesem Zeitpunkt zeigten mal eine Stunde zu früh.
Benötigen wir die Gelegenheit, um die Zeitzone ausgewählt und gespeichert, um seinen eigenen Bereich. Bevor ich das folgende zum speichern meiner datetime:
Um das Problem zu beheben habe ich geändert zu:
Zur Anzeige der korrekten Zeiten, die wir verwenden:
Ich wouuld versuchen Sie und verwenden Sie
die Anpassung für die Sommerzeit.
Mit Schienen, wir können ActiveSupport::TimeZone: die
Benutze ich TZip zu bekommen TimeZone-strings (z.B. "Pacific Time (US & Canada)") von zip-codes.