Ruby/Rails makalesinde, UTC DateTime öğelerini başka bir zaman dilimine nasıl dönüştürebilirim?Raylar: UTC DateTime öğesinin başka bir zaman dilimine dönüştürülmesi
cevap
time.in_time_zone(time_zone)
Örnek:
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)")
Sen yaparak ActiveSupport zaman dilimleri isimlerini bulabilirsiniz:
ActiveSupport::TimeZone.all.map(&:name)
# or for just US
ActiveSupport::TimeZone.us_zones.map(&:name)
ActiveSupport en TimeWithZone nesneleri deneyin dalavereler TimeZone ile ated. ActiveSupport ayrıca bir UTC saatini belirli bir TimeZone saat dilimine dönüştürmek için in_time_zone yöntemini sağlar. mckeed'in cevabı kodu gösterir.
TimeWithZone'u sınıfıma aktarmak için sözdizimi nedir? Yoksa varsayılan olarak Rails ile mi alabilirim? –
Varsayılan olarak alacağınıza inanıyorum. mckeed ihtiyacınız olan kodu var, ama bunu irb içinde görmeyeceksiniz. Rails'de koşmalısın. – Fred
Haklısınız - teşekkürler, Fred - varsayılan olarak Rails ile geliyor. Samanlıkta çalışıyorum, bunu irb'da çalışmayı denedim. –
Rails 4'te simple_form kullanıyorum ve sadece göçle
<%= f.input :time_zone, :as => :time_zone %>
olarak giriş alanını eklendi
class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration
def change
add_column :textmessages, :time_zone, :string
end
end
Sadece durumda, Rails ActiveRecord nesnesi ile ilgileniyor eğer .
de açıklamak config.time_zone
Daha detaylı olarak ayarlanan varsayılan zaman dilimini geçersiz kılan bir istek başına temeli Zaman dilimi için Time.use_zone
kullanmak iyi bir fikir olabilir Time.zone
eğer o zaman istediğiniz saat dilimi var sen Ben Time.now.in_time_zone ('CST') çalıştığınızda irb olarak @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
Rails 5 üzerinde çalışıyor ' Time.zone # => Avrupa/Paris my_date # => Çar, 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 # => Çar, 29 Mar 2017 17:00:20 +0000 " –
kullanabilirsiniz, ben "tanımsız yöntem 'in_time_zone'" hatası alıyorum. Bunu işe almak için ihtiyacım olan ray sınıfları var mı? –
Rails hangi versiyonunu kullanıyorsunuz? Time.zone.now.in_time_zone (...) yaparsanız çalışır mı? – mckeed
Kod örneği için çok teşekkürler. Bu onu (Fred'in yorumu ile birlikte) temizledi. Çok fazla şey yanlış yapıyordum, ben bile açıklamaya bile başlayamıyorum :-) –