Rails时间戳不同于mysql时间戳

时间:2014-12-12 23:36:09

标签: ruby-on-rails datetime

我的rails应用程序有一个Photo模型,它有一个名为taken_at的DATETIME列。

我试图理解为什么我使用以下方法获得不同的时间戳(自纪元以来的秒数):

Photo.find(3095).taken_at.to_i # => 1307292495
Photo.select("id, UNIX_TIMESTAMP(taken_at) as timestamp").where(:id => 3095).first['timestamp'] # => 1307317695
Photo.find(3095).taken_at.strftime('%s') # => "1307267295"

我正在使用MySQL作为数据库而我正在使用rails 4.1.7

  • 谢谢!

1 个答案:

答案 0 :(得分:2)

因此,在MYSQL中使用UNIX_TIMESTAMP(taken_at)给出不同结果的原因是因为MySQL假设taken_at是存储在服务器时区中的日期,并在进行时间戳计算之前将其转换为UTC的内部值。但,taken_at不是存储在服务器时区的日期,它是以UTC格式存储的日期,因为ActiveRecord将所有日期时间作为UTC存储在数据库中,然后当您从数据库中读回记录时将它们转换回本地时区。

参考: