Ruby / Rails'de, UTC DateTime'ı başka bir saat dilimine nasıl dönüştürebilirim?
Ruby / Rails'de, UTC DateTime'ı başka bir saat dilimine nasıl dönüştürebilirim?
Yanıtlar:
time.in_time_zone(time_zone)
Misal:
zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
Time.now.in_time_zone(zone)
ya da sadece
Time.now.in_time_zone("Central Time (US & Canada)")
ActiveSupport saat dilimlerinin adlarını şu şekilde bulabilirsiniz:
ActiveSupport::TimeZone.all.map(&:name)
# or for just US
ActiveSupport::TimeZone.us_zones.map(&:name)
require 'active_support/time'
önce.
rake time:zones:all
. Ayrıca bakınız rake -D time
. Varsayılan saat dilimini olarak ayarlayın config/application.rb
.
eğer Time.zone
sizin istediğiniz saat dilimi var o zaman kullanabilirsiniz@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
Sade yakutta sadece require 'date'
şu new_offset
yöntemi kullanın :
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')}"
Mac OS X 10.13'te standart olarak gelen Ruby 2.3.7 ile test edilmiştir.
ActiveSupport'un TimeZone ile değiştirilmiş TimeWithZone nesnelerini deneyin . ActiveSupport, UTC saatini belirli bir TimeZone saat dilimine dönüştürmek için in_time_zone yöntemini de sağlar. mckeed'in cevabı kodu gösterir.
Her ihtimale karşı, Rails'te ActiveRecord nesnesiyle uğraşıyorsanız.
İçinde Time.use_zone
ayarlanan varsayılan saat dilimini geçersiz kılan istek başına temel bir saat dilimi kullanmak iyi bir fikir olabilir .config.time_zone
Https://stackoverflow.com/a/25055692/542995 adresinde açıkladığım daha fazla ayrıntı
Rails 4'te simple_form kullanıyorum ve giriş alanını şu şekilde ekledim:
<%= f.input :time_zone, :as => :time_zone %>
göç ile
class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration
def change
add_column :textmessages, :time_zone, :string
end
end