如何计算created_at?

问题描述 投票:0回答:1

当我创建一个新的ActiveRecord实例时,created_at时间戳将保存到数据库中。

  • 这个时间戳是如何计算的?
  • 时间是基于服务器时间吗?
  • 时间总是以UTC时区为准吗?
  • 有没有关于此的文件?
ruby-on-rails rails-activerecord utc
1个回答
5
投票

以下是ActiveRecord中_create_record方法的实现:

def _create_record
  if record_timestamps
    current_time = current_time_from_proper_timezone

    all_timestamp_attributes_in_model.each do |column|
      if !attribute_present?(column)
        _write_attribute(column, current_time)
      end
    end
  end

  super
end

以下是current_time_from_proper_timezone方法的实现:

def current_time_from_proper_timezone
      default_timezone == :utc ? Time.now.utc : Time.now
end
  • 时间戳默认为UTC(使用Time.now.utc计算),但是可以在配置config.active_record.default_timezone = :local中更改(在这种情况下,它将使用Time.now计算)
  • 时间基于您的服务器
  • 默认情况下是UTC,但您可以通过设置config.active_record.default_timezone = :local来更改它

如果您想查看代码,请访问以下链接:https://github.com/rails/rails/blob/master/activerecord/lib/active_record/timestamp.rb

© www.soinside.com 2019 - 2024. All rights reserved.