MySQL时间戳与Ruby的Time.now不同?

时间:2011-12-09 12:01:19

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

在mysql db中记录:

2011-12-09 07:59:00 UTC

红宝石如果我Time.now

2011-12-09 03:57:46 -0800

我如何进行以下比较?(不起作用)

<% if item.exp_date < Time.now %>
    Expired
<% end %>

PS。如果有一个解决方案,我不必假设,如果数据库的时间存储结束于UTC或{ {1}}

3 个答案:

答案 0 :(得分:2)

使用><的日期/时间比较无论时区如何都可以正常工作。

[chris@chipbook:~/coding%] pry
[1] pry(main)> a = Time.now
=> 2011-12-09 23:09:14 +1100
[2] pry(main)> b = Time.now.utc
=> 2011-12-09 12:09:44 UTC
[3] pry(main)> a < b
=> true
[4] pry(main)> 

如果您想强制使用参考时区来保持一致性,请在其上调用#utc

答案 1 :(得分:1)

事实证明问题在于我在查询mysql时使用了NOW()

将以下内容添加到/etc/my.cnf修复了问题:

[mysqld_safe]
timezone = UTC

答案 2 :(得分:0)

默认的Rails时区是UTC,ActiveRecord会自动将时间转换为此时间。您可以在config / application.rb中进行设置。对于比较时间,您可以使用Time.zone.now,它指的是在application.rb中设置的时区。您可以使用$ rake time:zones:all检查可用的时区。