rails 中的时区介绍

默认情况下 rails 存取时间都会转换为UTC时间。
 
###    to_datetime 
 
rails的model中有timestamp,但是有时存储的时间和本地时间不同,需要在config/application.rb中加入:
config.active_record.default_timezone = :local  
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时间在以后更方便转换成任意时区,尤其是系统面向多个时区时,在向别的系统提供数据时也更方便。


作者:就叫初九吧
链接:https://www.jianshu.com/p/d49d8c4be131
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2021-08-26 15:45  鞋带松了  阅读(82)  评论(0编辑  收藏  举报