默认情况下,Rails中的created_at是否为Time.now.utc.to_date?

时间:2019-01-24 22:11:37

标签: ruby-on-rails ruby

Rails创建活动记录并将其插入时,created_at值实际上与Time.now.utc.to_date相同吗??

2 个答案:

答案 0 :(得分:2)

在大多数情况下是,但这取决于默认的时区配置选项。

ActiveRecord::Timestamp代码:

def current_time_from_proper_timezone
  default_timezone == :utc ? Time.now.utc : Time.now
end

您可以在以下位置进行change时区设置:

config.active_record.time_zone_aware_attributes = false

答案 1 :(得分:0)

如果您的意思是to_datetime,则不可以,在最坏的情况下,可能要关闭24小时。

如果您的意思是Time.now,那么我相信它与第二个相同。但是请注意,如果在创建记录之前或之后立即调用DateTime,则它可能与第二条记录不匹配。我很想知道为什么您需要转换为Post

只需自己测试一下(假设您的AR类别为dtm_before = Time.now.to_datetime post = Post.create!(attributes) dtm_after = Time.now.to_datetime # zone does not matter! # these differences should be tiny dtm_before.to_time - post.created_at dtm_after.to_time - post.created_at ):

# let's assume your local TZ-offset isn't zero
t = Time.now
t == t.getutc   # true
t - t.getutc  # 0.0 (these are the exact same instant)

我说过,区域无关紧要,因为在进行时间算术时,会自动考虑区域。示例:

{{1}}