【问题标题】:Discrepancy between System and Db timesSystem 和 Db 时间之间的差异
【发布时间】:2009-06-04 05:58:23
【问题描述】:

我有一个 Rails 应用程序,并且出于时区差异的目的,我将所有时间都以 UTC 格式存储在数据库中。我还通过将表中的“effective_end_date”字段设置为当前时间来使记录过期而不是删除它。然后我在模型中使用命名范围如下:

  named_scope :valid, :conditions => ['(effective_end_date IS NULL OR effective_end_date > ?) 
                                 AND (effective_start_date IS NULL OR effective_start_date < ?) ',Time.zone.now.gmtime, Time.zone.now.gmtime]

这似乎在我的 Mac 开发机器上运行良好,但是一旦我开始生产,系统时间和我不知道为什么的时间之间似乎存在差异!在 Linux 中键入“日期”命令似乎给出了正确的时间。查看下面的生产日志文件:

sms parser(inparser) daemon is still running at Wed Jun 03 22:38:36 -0700 2009.
[4;35;1mUltrasmsin Load (0.5ms)ESC[0m   ESC[0mSELECT * FROM `smsin` WHERE ((effective_end_date IS NULL OR effective_end_date > '2009-06-04 05:28:32') 
 AND (effective_start_date IS NULL OR effective_start_date < '2009-06-04 05:28:32') ) 

这是从以下代码行生成的查询:

ActiveRecord::Base.logger.info "sms parser(inparser) daemon is still running at #{Time.now}.\n"
nonConvertedMsgs = Ultrasmsin.valid.find(:all)

“Time.now”显示的第一个命令时间是正确的,但第二次(从命名范围中获取)似乎是错误的! (关闭 10 分钟)

这真的让我感到困惑,因为我认为 Time.zone.now.gmtime 只会转换小时而不会触及分钟,但似乎小时可以转换为 GM 时间,但分钟会减少 10 分钟!

有什么想法吗?

【问题讨论】:

  • 只是检查:您的数据库与 Web 应用程序在同一台机器上?我在两者之间的时间略有不同的问题,并最终在请求处理开始时从数据库服务器获取“当前日期时间”,然后将其用作“Time.now”,因为我不是能够保证两者之间的时钟同步。
  • 是的,我的数据库和 Web 应用程序在同一台机器 (VPS) 上。令我困惑的是数据库值是正确的,当我使用脚本/控制台键入值时,它似乎也是正确的。您如何从 DB 获取“当前日期时间”并将其设置为 Time.now?这可能是一个解决方案!对于 Jonathan:是的,我的意思是 UTC,我的错误。我会编辑帖子谢谢

标签: ruby-on-rails timezone


【解决方案1】:

在您的 Mac 开发机器上,所有东西 - DBMS、Rails、浏览器 - 都可能在一个时区中运行,这就是您的时区。

在您的生产机器上,很可能某些东西在不同的时区运行。 DBMS 如何处理客户端时区和数据库时区之间的差异取决于 DBMS。有些在 DBMS 的时区中运行——无论它启动时在其环境中设置的时区。有些考虑到客户的时区。有时,没有简单的方法可以找到客户的时区。

一般来说,现代世界的时区是 UTC 时间 1 小时的倍数。也有例外 - 印度 (+05:30) 和纽芬兰 (-04:30) 都是 UTC 半小时的倍数,而尼泊尔则在 (+05:45)。但是,格式错误的时区设置可能会导致问题发生。

还请记住,客户端和服务器上的时钟可能不会与某处的原子钟同步,因此可能会出现十分钟的偏差,因为机器上缺少 SNTP (NTP) 服务。

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2011-02-05
    • 2015-03-06
    • 2012-12-14
    • 2019-03-09
    相关资源
    最近更新 更多