2014-12-12 111 views
2

我的Rails应用程序有一个Photo模型,它有一个名为taken_at的DATETIME列。与mysql时间戳不同的Rails时间戳

我尝试使用下面的方法来理解为什么我得到一个不同的时间戳(自新纪元秒的NUM):

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

他们关闭的正好为7小时,这似乎预示着一个时差。 – Darryl 2014-12-12 23:39:49

+0

Darryl - 我同意这是一个时区的事情,但我不明白为什么。 – Francois 2014-12-13 02:48:49

回答

2

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

引用: