Di Ruby / Rails, bagaimana cara mengonversi DateTime UTC ke zona waktu lain?
Di Ruby / Rails, bagaimana cara mengonversi DateTime UTC ke zona waktu lain?
Jawaban:
time.in_time_zone(time_zone)
Contoh:
zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
Time.now.in_time_zone(zone)
atau hanya
Time.now.in_time_zone("Central Time (US & Canada)")
Anda dapat menemukan nama zona waktu ActiveSupport dengan melakukan:
ActiveSupport::TimeZone.all.map(&:name)
# or for just US
ActiveSupport::TimeZone.us_zones.map(&:name)
require 'active_support/time'
pertama.
rake time:zones:all
. Lihat juga rake -D time
. Setel zona waktu default di config/application.rb
.
jika Time.zone
itu zona waktu yang Anda inginkan maka Anda dapat menggunakan@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
Di ruby biasa, dengan hanya require 'date'
, gunakan new_offset
metode:
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')}"
Diuji dengan ruby 2.3.7 yang menjadi standar pada Mac OS X 10.13.
Coba ActiveSupport ini TimeWithZone benda dimanipulasi dengan TimeZone. ActiveSupport juga menyediakan metode in_time_zone untuk mengonversi waktu UTC ke zona waktu TimeZone yang ditentukan. jawaban mckeed menunjukkan kodenya.
Untuk berjaga-jaga, jika Anda berurusan dengan objek ActiveRecord di Rails.
Sebaiknya gunakan Time.use_zone
zona waktu berdasarkan permintaan yang menggantikan zona waktu default yang disetelconfig.time_zone
Lebih jelasnya saya jelaskan di https://stackoverflow.com/a/25055692/542995
Saya menggunakan simple_form di Rails 4 dan saya baru saja menambahkan kolom input sebagai
<%= f.input :time_zone, :as => :time_zone %>
dengan migrasi
class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration
def change
add_column :textmessages, :time_zone, :string
end
end