Ich habe die Zeitzone in /config/application.rb
festgelegt, und ich erwarte, dass alle in meiner App generierten Zeiten standardmäßig in dieser Zeitzone liegen. Wenn ich jedoch ein neues Objekt DateTime
anlege (unter Verwendung von .new
), wird es in GMT
erstellt. Wie kann ich erreichen, dass es in der Zeitzone meiner App angezeigt wird?Wie erstelle ich ein neues DateTime-Objekt in einer bestimmten Zeitzone (vorzugsweise die Standardzeitzone meiner App, nicht UTC)?
/config/application.rb
config.time_zone = 'Pacific Time (US & Canada)'
irb
irb> DateTime.now
=> Wed, 11 Jul 2012 19:04:56 -0700
irb> mydate = DateTime.new(2012, 07, 11, 20, 10, 0)
=> Wed, 11 Jul 2012 20:10:00 +0000 # GMT, but I want PDT
Mit in_time_zone
funktioniert nicht, weil das nur die GMT-Zeit zu PDT Zeit konvertiert, die das falsch ist Zeit:
irb> mydate.in_time_zone('Pacific Time (US & Canada)')
=> Wed, 11 Jul 2012 13:10:00 PDT -07:00 # wrong time (I want 20:10)
Das ist wirklich hilfreich! Was aber, wenn Sie eine Zeit in einer anderen Zone erstellen möchten, als Sie config.time_zone = in config/application.rb festgelegt haben? – idrinkpabst
Ich würde etwas wie '' 2012-07-11 21: 00'.to_datetime.in_time_zone ('Eastern Time (USA und Kanada)') ' –
verwenden das funktioniert eigentlich nicht. Nehmen wir an, Sie möchten eine Zeit in Zone für 9 Uhr Eastern erstellen. Wenn Sie '2012-07-11 09: 00'.to_datetime.in_time_zone (' Eastern Time (USA & Kanada) ') eingeben, erhalten Sie dadurch die falsche Zeit zurück, da die Konvertierung von UTC erfolgt. Wenn Sie '2012-07-11 09:00 Eastern Time (USA & Kanada)'. to_datetime.in_time_zone ('Eastern Time (USA & Kanada)') tun, funktioniert dies immer noch nicht, da DateTime bei Tageslicht unschön ist Sparzeit. Am besten vermeiden Sie DateTime vollständig. Irgendwelche Ideen? – idrinkpabst