2010-04-23 12 views

Respuesta

181
time.in_time_zone(time_zone) 

Ejemplo:

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

o simplemente

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

Usted puede encontrar los nombres de las zonas horarias ActiveSupport haciendo:

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

En IRB, cuando intento Time.now.in_time_zone ('CCT'), me sale el error "método no definido 'in_time_zone'". ¿Hay clases de rieles que necesito para que esto funcione? –

+0

¿Qué versión de Rails estás usando? ¿Funciona si haces Time.zone.now.in_time_zone (...)? – mckeed

+0

Muchas gracias por la muestra de código. Eso lo aclaró (junto con el comentario de Fred). Estaba haciendo tantas cosas mal, ni siquiera puedo empezar a explicar :-) –

3

Trate TimeWithZone objetos de ActiveSupport MANIPUL con TimeZone. ActiveSupport también proporciona el método in_time_zone para convertir una hora UTC en un huso horario TimeZone especificado. La respuesta de mckeed muestra el código.

+0

¿Cuál es la sintaxis para importar TimeWithZone en mi clase? ¿O lo obtengo de manera predeterminada con Rails? –

+1

Creo que lo obtienes por defecto. mckeed tiene el código que necesitas, pero no lo verás en irb. Debes ejecutarlo en Rails. – Fred

+0

Tienes razón, gracias, Fred, viene con Rails por defecto. Estaba agarrando paja, tratando de que funcionara en irb. –

0

estoy usando simple_form en los carriles 4 y que acaba de agregar el campo de entrada como

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

con la migración

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

Por si acaso, si se trata de objetos ActiveRecord en Rails .

Podría ser una buena idea utilizar Time.use_zone de por solicitud zona horaria base de que anula la zona horaria por defecto en config.time_zone

Más detalles explico en https://stackoverflow.com/a/25055692/542995

4

si Time.zone es su zona horaria deseada, entonces puede utilizar @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

No funciona en Rails 5 ' Time.zone # => Europe/Paris my_date # => Mié, 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 # => mié, 29 mar 2017 17:00:20 +0000 ' –

Cuestiones relacionadas