我有一个 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/