Moje created_at
sygnatury czasowe są przechowywane w UTC:
>> Annotation.last.created_at
=> Sat, 29 Aug 2009 23:30:09 UTC +00:00
Jak zamienić jeden z nich na „czas wschodni (USA i Kanada)” (biorąc pod uwagę czas letni)? Coś jak:
Annotation.last.created_at.in_eastern_time
ruby-on-rails
ruby
datetime
Tom Lehman
źródło
źródło
now.in_time_zone(3)
created_at.in_time_zone("EST")
jest krótszyChociaż to stare pytanie, warto o czymś wspomnieć. W poprzedniej odpowiedzi sugerowano użycie before_filter do tymczasowego ustawienia strefy czasowej.
Nigdy, przenigdy nie powinieneś tego robić, ponieważ Time.zone przechowuje informacje w wątku i prawdopodobnie wycieknie do następnego żądania obsługiwanego przez ten wątek.
Zamiast tego powinieneś użyć around_filter, aby upewnić się, że Time.zone zostanie zresetowany po zakończeniu żądania. Coś jak:
Przeczytaj więcej na ten temat tutaj
źródło
Jeśli dodasz to do swojego
/config/application.rb
Wtedy możesz dzwonić do komórki
aby uzyskać czas w określonej strefie czasowej.
źródło
Jeśli skonfigurujesz
/config/application.rb
źródło
Ustaw strefę czasową na czas wschodni.
Możesz ustawić domyślną strefę czasową w config / environment.rb
Teraz wszystkie wyciągane rekordy będą w tej strefie czasowej. Jeśli potrzebujesz różnych stref czasowych, powiedzmy w oparciu o strefę czasową użytkownika, możesz ją zmienić za pomocą filtru before_filter w kontrolerze.
Tylko upewnij się, że przechowujesz wszystkie swoje czasy w bazie danych jako UTC i wszystko będzie słodkie.
źródło
Time.zone=
jest bezpieczny dla wątków github.com/rails/rails/blob/master/activesupport/lib/… .