Rails: convert UTC DateTime to another time zone

后端 未结 6 1422
小鲜肉
小鲜肉 2020-12-22 15:39

In Ruby/Rails, how do I convert a UTC DateTime to another time zone?

相关标签:
6条回答
  • 2020-12-22 16:18

    Just in case, if you are dealing with ActiveRecord object in Rails.

    It might be a good idea to use Time.use_zone for a per request basis timezone that overrides the default timezone set in config.time_zone

    More details I explain at https://stackoverflow.com/a/25055692/542995

    0 讨论(0)
  • 2020-12-22 16:20

    In plain ruby, with only require 'date', use the new_offset method:

    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')}"
    

    Tested with ruby 2.3.7 that came standard on Mac OS X 10.13.

    0 讨论(0)
  • 2020-12-22 16:23
    time.in_time_zone(time_zone)
    

    Example:

    zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
    Time.now.in_time_zone(zone)
    

    or just

    Time.now.in_time_zone("Central Time (US & Canada)")
    

    You can find the names of the ActiveSupport time zones by doing:

    ActiveSupport::TimeZone.all.map(&:name)
    # or for just US
    ActiveSupport::TimeZone.us_zones.map(&:name)
    
    0 讨论(0)
  • 2020-12-22 16:28

    if Time.zone it's your desired time zone then you can use @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 
    
    0 讨论(0)
  • 2020-12-22 16:30

    Try ActiveSupport's TimeWithZone objects manipulated with TimeZone. ActiveSupport also provides the in_time_zone method for converting a UTC time to a specified TimeZone time zone. mckeed's answer shows the code.

    0 讨论(0)
  • 2020-12-22 16:30

    I'm using simple_form in Rails 4 and I just added the input field as

    <%= f.input :time_zone, :as => :time_zone %>
    

    with the migration

    class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration
      def change
        add_column :textmessages, :time_zone, :string
      end
    end
    
    0 讨论(0)
提交回复
热议问题