Wie konvertiere ich in Ruby / Rails eine UTC DateTime in eine andere Zeitzone?
Wie konvertiere ich in Ruby / Rails eine UTC DateTime in eine andere Zeitzone?
Antworten:
time.in_time_zone(time_zone)
Beispiel:
zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
Time.now.in_time_zone(zone)
oder nur
Time.now.in_time_zone("Central Time (US & Canada)")
Sie können die Namen der ActiveSupport-Zeitzonen folgendermaßen ermitteln:
ActiveSupport::TimeZone.all.map(&:name)
# or for just US
ActiveSupport::TimeZone.us_zones.map(&:name)
require 'active_support/time'
zuerst.
rake time:zones:all
. Siehe auch rake -D time
. Legen Sie die Standardzeitzone in fest config/application.rb
.
Wenn Time.zone
es Ihre gewünschte Zeitzone ist, können Sie verwenden@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
require 'date'
Verwenden Sie in reinem Rubin nur mit new_offset
:
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')}"
Getestet mit Ruby 2.3.7, das unter Mac OS X 10.13 Standard war.
Probieren Sie die TimeWithZone- Objekte von ActiveSupport aus , die mit TimeZone bearbeitet wurden . ActiveSupport bietet auch die Methode in_time_zone zum Konvertieren einer UTC-Zeit in eine angegebene TimeZone-Zeitzone. Die Antwort von mckeed zeigt den Code.
Nur für den Fall, dass Sie mit ActiveRecord-Objekten in Rails arbeiten.
Es ist möglicherweise eine gute Idee, Time.use_zone
eine Zeitzone pro Anforderung zu verwenden, die die eingestellte Standardzeitzone überschreibtconfig.time_zone
Weitere Details erkläre ich unter https://stackoverflow.com/a/25055692/542995
Ich verwende simple_form in Rails 4 und habe gerade das Eingabefeld als hinzugefügt
<%= f.input :time_zone, :as => :time_zone %>
mit der Migration
class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration
def change
add_column :textmessages, :time_zone, :string
end
end