2012-08-06 16 views
12

W mojej bazie danych MySQL pole updated_at jest przechowywane jako UTC. W zeszłym tygodniu zapisano o 19:00 EDT, a jego wartość updated_at to "2012-08-01 23:00:00". Próbuję przekonwertować czas lokalny klienta WWW na UTC, który można porównać z polem updated_at w bazie danych.Konwersja czasu lokalnego do UTC w Railsach

Jako przykład, chciałbym zamienić "08/01/2012 19:00" na "2012-08-01 23:00:00" (co oznacza, że ​​jestem w EDT), ale jestem brakuje aspektu strefy czasowej konwersji. "19:00" jest czasem lokalnym i może pochodzić z dowolnej strefy czasowej. Mój obecny kod:

ruby-1.9.2-head :015 > from_date = DateTime.strptime('08/01/2012 07:00 pm', '%m/%d/%Y %H:%M %p') 
=> Wed, 01 Aug 2012 19:00:00 +0000 
ruby-1.9.2-head :016 > from_date = Time.zone.parse(from_date.to_s).utc 
=> 2012-08-01 19:00:00 UTC 

Jakieś przemyślenia?

Edycja: Również mógłbym użyć "% Z" w moim wywołaniu strptime, ale to zakładając, że mam strefę czasową w wartości, której aktualnie nie mam. Sądzę, że mógłbym użyć Javascript do wysłania wraz z wartością daty/czasu.

+0

Czy to byłby ty? http://stackoverflow.com/questions/4820819/how-to-convert-date-into-utc-in-ruby-rails – lcguida

Odpowiedz

20

lokalny UTC

created_at.utc

UTC do lokalnych

created_at.localtime

0

Najpierw sprawdziłbym twoje ustawienie strefy czasowej.

W swojej environment.rb (Rails 2) lub environment.rb (Rails 3) plików, można ustawić domyślną strefę czasową z: config.time_zone = 'Eastern Daylight Time (EDT)'

drugie chciałbym spojrzeć na tym stanowisku do informacji i wskazówek i porad, aby swoich potrzeb:
http://databasically.com/2010/10/22/what-time-is-it-or-handling-timezones-in-rails/

+0

Nie mam strefy czasowej jawnie ustawionej, więc domyślnie jest to UTC. Jeśli zmienię domyślną wartość na EDT, czy będzie to miało wpływ na dane, które zostały już zapisane w bazie danych? –

Powiązane problemy