mysql - Rails 4 忽略 UTC 转换为 MySQL 数据库

标签 mysql ruby-on-rails time utc

我有一个 Rails 4 应用程序,根据最佳实践,它以 UTC 格式将日期存储在我的 MySQL 数据库中。还行吧。

但是,我有一个无法正常工作的场景。

我有一个事件管理器,它始终在运行,寻找要运行的新事件(存储在数据库中)。这些事件根据用户在网站上的操作存储在数据库中。 DB中的事件表有一个execution_date字段,用于存储事件计划执行日期。据此,当用户执行创建事件的操作时,事件execution_date 会转换为 UTC。

在 Rails 中,我使用 Time.now --> 2014-10-04T01:02:10-07:00 (距 UTC 7 小时)。在 DB 中,此时间转换为 UTC,因此我看到 2014-10-04 08:02:10。我觉得这也是对的。

但问题是事件管理器正在运行下一个查询以获取待执行的事件:

SELECT e.*
                               FROM events e, event_states es
                               WHERE e.execution_date <= NOW()
                               AND es.name = 'Pending'
                               AND es.id = e.event_state_id

当我运行此查询时,NOW() 返回我的本地时间,即 2014-10-04 01:02:25。因此,现在应该执行的事件将在 7 小时后执行。

因此,作为摘要,execution_date 应始终存储在服务器本地时间中。

最佳答案

根据上面的 @mccannf 评论,我没有将数据库更新为 UTC 时间,但我将查询替换为

SELECT e.*
                               FROM events e, event_states es
                               WHERE e.execution_date <= UTC_TIMESTAMP()
                               AND es.name = 'Pending'
                               AND es.id = e.event_state_id

注意:使用 UTC_TIMESTAMP() 获取 UTC 时间。

关于mysql - Rails 4 忽略 UTC 转换为 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26191103/

相关文章:

r - 在R控制台中覆盖当前输出

mysql - 从另一个表中选择表记录

php - 在 PHP 中处理大型 while 循环的最佳方法

php - 防止在 mySQL 中选择同一行

mysql - 如何在两个提交标签上提及表单中的不同操作?

ruby-on-rails - 应该匹配器和自定义错误消息

mysql - 可见表在 phpmyadmin 中不存在

jquery - 使用 Jquery 查找具有特定属性的文本区域的数量

c# - 如何记录计算机之间的相对时间?

java - 来自 YearMonth 的 LocalDate 和第 n 个 DayOfWeek