Ustawiłem strefę czasową w /config/application.rb
i domyślnie oczekuję, że wszystkie czasy wygenerowane w mojej aplikacji będą znajdować się w tej strefie czasowej, ale gdy utworzę nowy obiekt DateTime
(używając .new
), utworzymy go w GMT
. Jak mogę to ustawić w strefie czasowej mojej aplikacji?Jak utworzyć nowy obiekt DateTime w określonej strefie czasowej (najlepiej domyślna strefa czasowa mojej aplikacji, a nie 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
Korzystanie in_time_zone
nie działa, ponieważ to właśnie konwertuje czas GMT czasu PDT, która jest źle czas:
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)
To jest naprawdę pomocne! Ale co jeśli chcesz stworzyć czas w strefie innej niż ustawiłeś config.time_zone = to w config/application.rb? – idrinkpabst
Użyłbym czegoś takiego jak ''2012-07-11 21: 00'.to_datetime.in_time_zone (' Eastern Time (US & Canada) ')' –
to tak naprawdę nie działa. załóżmy, że chcesz utworzyć strefę czasową dla 9 rano wschodniej. jeśli wykonasz "2012-07-11 09: 00" .to_datetime.in_time_zone ("czas wschodni (USA i Kanada)"), to da ci zły czas, ponieważ konwertuje z UTC. jeśli wykonasz "2012-07-11 09:00 czasu wschodniego (USA i Kanada)" to_datetime.in_time_zone ("czas wschodni (USA i Kanada)") to nadal nie działa, ponieważ DateTime jest paskudny, jeśli chodzi o światło dzienne oszczędność czasu. Najlepiej całkowicie unikać DateTime. Jakieś pomysły? – idrinkpabst