En Ruby / Rails, ¿cómo convierto una fecha y hora UTC a otra zona horaria?
En Ruby / Rails, ¿cómo convierto una fecha y hora UTC a otra zona horaria?
Respuestas:
time.in_time_zone(time_zone)
Ejemplo:
zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
Time.now.in_time_zone(zone)
o solo
Time.now.in_time_zone("Central Time (US & Canada)")
Puede encontrar los nombres de las zonas horarias de ActiveSupport haciendo lo siguiente:
ActiveSupport::TimeZone.all.map(&:name)
# or for just US
ActiveSupport::TimeZone.us_zones.map(&:name)
require 'active_support/time'
primero.
rake time:zones:all
. También vea rake -D time
. Establezca la zona horaria predeterminada en config/application.rb
.
si Time.zone
es su zona horaria deseada, puede usar@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
En rubí simple, con solo require 'date'
, use el new_offset
método:
require 'date'
d=DateTime.parse('2000-01-01 12:00 +0200')
l=d.new_offset('-0700')
u=l.new_offset('UTC')
puts "#{u.strftime('%a %F %T %Z')} ❖ #{l.strftime('%a %F %T %Z')}"
Probado con ruby 2.3.7 que viene de serie en Mac OS X 10.13.
Pruebe los objetos TimeWithZone de ActiveSupport manipulados con TimeZone. ActiveSupport también proporciona el método in_time_zone para convertir una hora UTC en una zona horaria específica. La respuesta de mckeed muestra el código.
Por si acaso, si se trata de un objeto ActiveRecord en Rails.
Puede ser una buena idea utilizar Time.use_zone
una zona horaria por solicitud que anule la zona horaria predeterminada establecida enconfig.time_zone
Más detalles que explico en https://stackoverflow.com/a/25055692/542995
Estoy usando simple_form en Rails 4 y acabo 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