2010-04-23 18 views

risposta

181
time.in_time_zone(time_zone) 

Esempio:

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

o semplicemente

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

È possibile trovare i nomi dei fusi orari ActiveSupport facendo:

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

In IRB, quando provo Time.now.in_time_zone ('CST'), ottengo l'errore "metodo non definito 'in_time_zone'". Ci sono dei corsi di rails di cui ho bisogno per farlo funzionare? –

+0

Quale versione di Rails stai usando? Funziona se fai Time.zone.now.in_time_zone (...)? – mckeed

+0

Grazie mille per il codice di esempio. Questo lo ha chiarito (insieme al commento di Fred). Stavo facendo tante cose sbagliate, non posso nemmeno cominciare a spiegare :-) –

3

Prova TimeWithZone oggetti di ActiveSupport MANIPUL associato a TimeZone. ActiveSupport fornisce inoltre il metodo in_time_zone per la conversione di un orario UTC in un fuso orario TimeZone specificato. La risposta di mckeed mostra il codice.

+0

Qual è la sintassi per l'importazione di TimeWithZone nella mia classe? O lo prendo di default con Rails? –

+1

Credo di averlo capito di default. mckeed ha il codice che ti serve, ma non lo vedrai in irb. Devi eseguirlo in Rails. – Fred

+0

Hai ragione - grazie, Fred - viene fornito con Rails per impostazione predefinita. Stavo afferrando le cannucce, cercando di farlo funzionare in irb. –

0

sto usando simple_form in Rails 4 e ho appena aggiunto il campo di input come

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

con la migrazione

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

Solo nel caso, se avete a che fare con l'oggetto ActiveRecord in Rails .

Potrebbe essere una buona idea di utilizzare Time.use_zone per un secondo la richiesta fuso orario base che sostituisce il fuso orario predefinito impostato in config.time_zone

Maggiori dettagli spiego a https://stackoverflow.com/a/25055692/542995

4

se Time.zone è il tuo fuso orario desiderato allora si può usare @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

Non funziona su Rails 5 ' Time.zone # => Europa/Parigi my_date # => mer, 29 mar 2017 19:00:20 +0200 my_date.to_time # =>" 2017-03-29T17 : 00: 20.000 + 00: 00 " my_date.to_time.to_datetime # => mer, 29 mar 2017 17:00:20 +0000 ' –

Problemi correlati