美文网首页Ruby & RailsRuby
rails 中的时区问题

rails 中的时区问题

作者: 就叫初九吧 | 来源:发表于2017-09-08 15:49 被阅读50次

    UTC 为协调世界时。

    维基百科世界时区划分图

    其中东西十二区各站7.5度。

    UTC 与当地时间转换 在东时区UTC时间 加上所在时区时差, 在西时区 UTC时间减去相应的时区时差


    默认情况下 rails 存取时间都会转换为UTC时间。
    config.time_zone 设置应用的时区,ActiveRecord 取时间时根据这个设置自动转换
    config.active_record.default_timezone = :local rails 往数据库存时间时根据time_zone配置的时区存时间。
    default_timezone应该和time_zone一起使用并且time_zone应该在default_timezone前面。


    注意在rails console 中 显示Model Object的时候 时间调用了 TimeWithZone#to_s(:db),此时显示的是utc时间,不一定是数据库存储的时间。可以使用pry-rails

    def to_s(format = :default)
      if format == :db
        utc.to_s(format)
      elsif formatter = ::Time::DATE_FORMATS[format]
        formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
      else
        "#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}" # mimicking Ruby Time#to_s format
      end
    end
    

    建议:
    在往数据库存数据的时候default_timezone使用UTC,time_zone根据情况设置。
    因为存的是UTC时间在以后更方便转换成任意时区,尤其是系统面向多个时区时,在向别的系统提供数据时也更方便。


    Rails 中的时区及时间问题
    关于 Rails 中奇怪的时区问题

    相关文章

      网友评论

        本文标题:rails 中的时区问题

        本文链接:https://www.haomeiwen.com/subject/jkogjxtx.html