【问题标题】:MYSQL wrong time.nowMYSQL 错误时间.now
【发布时间】:2011-04-22 06:40:17
【问题描述】:

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

为了更好地解释,我们现在假设它是 13:00 UTC。

  • Ubuntu 系统时间设置为 15:00 UTC +02:00(那是 CEST(中欧夏令时),对于我们的时区来说是正确的)。

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

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

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

但是当我们查看 timestemp 时,它与当前服务器时间的 -2 小时偏移量(在我们的示例中为 11:00)

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

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

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

【问题讨论】:

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


    【解决方案1】:

    为 rails 配置两件事。

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

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

    由于您的系统时间设置为 CEST,因此您也需要使用相同的值。

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

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 2016-03-31
      • 2022-06-17
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多