MYSQL错误的时间。现在

时间:2010-10-07 09:39:56

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

我们在MYSQL DB上运行了基于Ruby 1.9.2的Rails 3服务器以及time.now和time.zone.now设置的问题。

为了更好地解释,我们现在正在协助其13:00 UTC。

  • Ubuntu Systemtime设置为15:00 UTC +02:00(这是CEST(中欧夏令时),对我们的时区是正确的。)

  • Rails时间(time.now)设置为13:00 +0200

  • time.zone.now设置为CEST
  • MYSQL全局时间和会话时间都设置为SYSTEM

现在我们在MYSQL DB中创建一个新条目(通过activerecord),它有一个时间戳。

但是当我们看时间计时它的-2小时偏移到当前服务器时间(在我们的例子中是11:00)

我们尝试将time.zone设置为一个非常不同的测试建议,它对新的mysql条目绝对没有影响。 我们还尝试将mysql全局时间和会话时间设置为UTC,没有效果。

我们现在唯一可以想象的可能是问题是time.now对mysql条目生效并且设置错误。问题在这里:我们无法设置time.now设置。但即使这样可能以某种方式(是吗?),如果能解决这个问题,也不知道。

有没有人有这样的问题或任何想法可能导致它?

1 个答案:

答案 0 :(得分:2)

为rails配置两件事。

  1. 您已完成的当前时区(在Time.zone.now中使用),它设置您加载的实例化记录中时间戳的时区。

  2. 存储到db时这些值转换为的时区。这应该设置为与system / mysql相同的时区。 我认为这个选项是通过以下方式配置的:ActiveRecord :: Base.default_timezone =:utc

  3. 由于您的系统时间设置为CEST,因此您也希望使用相同的值。

    有两个配置选项的原因是,如果您有多个时区(国际受众)的用户,则可以为每个登录用户设置不同的Time.zone,并且db timezone将正确转换为Time。区域时区。