2010-04-23 17 views

Odpowiedz

181
time.in_time_zone(time_zone) 

Przykład:

zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)") 
Time.now.in_time_zone(zone) 

lub po prostu

Time.now.in_time_zone("Central Time (US & Canada)") 

można znaleźć nazwy stref czasowych ActiveSupport wykonując:

ActiveSupport::TimeZone.all.map(&:name) 
# or for just US 
ActiveSupport::TimeZone.us_zones.map(&:name) 
+0

w IRB, gdy próbuję Time.now.in_time_zone ('CST'), pojawia się błąd "metoda niezdefiniowany 'in_time_zone'". Czy istnieją klasy szyn, które są mi potrzebne, aby to działało? –

+0

Którą wersję Rails używasz? Czy to działa, jeśli robisz Time.zone.now.in_time_zone (...)? – mckeed

+0

Dziękuję bardzo za próbkę kodu. To wyjaśniło to (wraz z komentarzem Freda). Robiłem tak wiele złych rzeczy, nie mogę nawet zacząć wyjaśniać :-) –

3

Spróbuj ActiveSupport za TimeWithZone obiektów manipul z TimeZone. ActiveSupport udostępnia także metodę in_time_zone do konwersji czasu UTC na określoną strefę czasową TimeZone. Odpowiedź mckeeda pokazuje kod.

+0

Jaka jest składnia importowania TimeWithZone do mojej klasy? Czy domyślnie otrzymam Rails? –

+1

Domyślne ustawienie domyślne. mckeed ma kod, którego potrzebujesz, ale nie zobaczysz tego w irb. Musisz uruchomić go w Railsach. – Fred

+0

Masz rację - dziękuję, Fred - domyślnie przychodzi z Railsami. Chwyciłam słomki, próbując sprawić, żeby zadziałało. –

0

Używam simple_form w Rails 4 i po prostu dodaje się pole wprowadzania jako

<%= f.input :time_zone, :as => :time_zone %> 

z migracją

class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration 
    def change 
    add_column :textmessages, :time_zone, :string 
    end 
end 
3

Tylko w przypadku, gdy mamy do czynienia z obiektem ActiveRecord w Rails .

To może być dobry pomysł, aby użyć Time.use_zone dla jednej życzenie Podstawa strefy czasowej, która zastępuje domyślną strefę czasową ustawioną w config.time_zone

Więcej szczegółów wyjaśnię na https://stackoverflow.com/a/25055692/542995

4

jeśli Time.zone to pożądany strefa czasowa wtedy można użyć @date.to_time.to_datetime

> @date 
=> Tue, 02 Sep 2014 23:59:59 +0000 
> @date.class 
=> DateTime 
> @date.to_time 
=> 2014-09-02 12:59:59 -1100 
> @date.to_time.to_datetime 
=> Tue, 02 Sep 2014 12:59:59 -1100 
+0

Nie działa na szynach 5 ' Time.zone # => Europa/Paryż my_date # => Środa, 29 marca 2017 19:00:20 +0200 my_date.to_time # =>" 2017-03-29T17 : 00: 20.000 + 00: 00 " my_date.to_time.to_datetime # => Środa, 29 marca 2017 17:00:20 +0000 ' –

Powiązane problemy