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时间在以后更方便转换成任意时区,尤其是系统面向多个时区时,在向别的系统提供数据时也更方便。
网友评论