Dieses Problem hat mich für eine Weile verzehrt.Rails 5: DateTime-Objekt Zeitzone nicht korrekt konvertieren
Ich nehme ein Datum Zeit string:
[14] pry(#<EventsController>)> params[:event][:ended_at]
=> "05/31/2017 2:00 PM"
ich es in ein Datetime-Objekt konvertieren:
pry(#<EventsController>)> to_datetime = DateTime.strptime(params[:event][:ended_at], "%m/%d/%Y %H:%M %p")
=> Wed, 31 May 2017 14:00:00 +0000
Wenn ich die in_time_zone
Methode auf dem to_datetime
Objekt ausgeführt es gibt die falsche Zeit für pacific Zeitzone:
[16] pry(#<EventsController>)> to_datetime.in_time_zone("Pacific Time (US & Canada)")
=> Wed, 31 May 2017 07:00:00 PDT -07:00
Es sollte "2:00 PM" das gleiche lesen wie es eingegeben wird.
Wenn ich gehe zu Google und überprüfen, um zu sehen, ob „14.00.00 0.000“ die für die PDT Zeit korrekte Eingabe ist prüft es als richtig:
Irgendwelche Hinweise darüber, warum es nicht korrekt konvertieren?
Ich bin * fast * da. Allerdings habe ich einen Unterschied von einem Stundenunterschied. Die Strings, mit denen ich arbeite, enthalten nicht die '-0700', also muss ich sie mit der 'current_user' Zeitzone formatieren (aktuell" Pacific Time (USA & Canada) "): ' datetime_string = Parameter [: Ereignis] [: Started_at] + "" + Current_user.time_zone " ' to_datetime = DateTime.strptime (datetime_string, "% m /% d /% Y% H:% M% p% Z") ' Wenn ich sehe, wie es in der Konsole speichert, sehe ich 'Wed, 31. Mai 2017 20:00:00 UTC +00: 00' Welches ist 1PM und nicht 2PM wie die Zeichenfolge kam als. Was ist falsch daran, wie ich es mache? – Antonio
die einzige Erklärung, die ich dafür habe, ist, dass, wenn Sie die anfängliche Umwandlung 'strptime' verwenden, die Sommerzeitänderung nicht feststellen. Ich empfehle Ihnen, 'time = Time.strptime (Datum +" Pacific Time (USA & Kanada) ","% m /% d /% Y% H:% M% p% Z ")' – zetacu
Ich sah Ihre Bearbeitung, Ich erhalte keinen UTC-Offset, den Sie bei Ihrer Bearbeitung demonstrieren. Ich sehe, Ihre ist -0700 und meins zeigt +0000 '[2] pry (#)> datetime_string' ' => "31.05.2017 2:00 Uhr Pacific Time (USA und Kanada)" ' ' [3] pry (# )> Zeit = Zeit.Strptime (DatumZeichenfolge, "% m /% d /% Y% H:% M% p% Z") ' ' => 2017-05 -31 14:00:00 + 0000' –
Antonio