编程

当前位置:永利皇宫463登录 > 编程 > 时区问题,中的时区问题

时区问题,中的时区问题

来源:http://www.makebuLuo.com 作者:永利皇宫463登录 时间:2019-09-21 08:47

Time.zone
这个是设置最终处理显示的时区,可以覆盖config.time_zone,参数和config.time_zone一样。

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

2

config.active_record.default_timezone
这个default_timezone是决定active_record对数据库交互的时区设置,也就是影响created_at和updated_at在数据库的记录时间。只有两个参数:utc和:local,rails初始化时默认是utc,所以保存到数据库的时间是utc时间。


ENV['TZ']
这个变量指的是服务器系统变量,ubuntu下可以用cat /etc/timezone来查看。当这个值为Asia/Shanghai时,显示的就是中国时间。对于ruby/rails来说,这个值决定Time.now的显示时间。

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

要在界面和数据库都很好的显示处理中国时区时间,编辑/config/application.rb(rails2是environment.rb),加入

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

config.time_zone
这个值是rails系统对显示时间的默认设置,可以通过rake time:zones:all列出所有可以设置的时区,一般来说把这个设置为Beijing。

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

完美解决rails中国时区时间设置。

永利皇宫463登录 1

  1. config.active_record.default_timezone=:local
  2. config.time_zone='Beijing'

解释4个时区设置的不同:

UTC 为协调世界时。


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

维基百科世界时区划分图

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

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

本文由永利皇宫463登录发布于编程,转载请注明出处:时区问题,中的时区问题

关键词:

上一篇:时区问题,中的时区问题

下一篇:没有了