如何计算created_at?

时间:2018-08-29 03:39:09

标签: ruby-on-rails rails-activerecord utc

当我创建一个新的ActiveRecord实例时,| ID | Name | Surname | BranchCode | CountryCode | PersonUnit +-----+-------+---------+------------+--------------+---------- | 83 | Jeck | Payl | 100 | 087 | 196 | 65 | Alb | Payl | 170 | 983 | 325 时间戳会保存到数据库中。

  • 该时间戳如何计算?
  • 时间是否基于服务器时间?
  • 时间总是在UTC时区吗?
  • 是否有相关文档?

1 个答案:

答案 0 :(得分: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