【发布时间】:2014-11-29 05:30:33
【问题描述】:
我有一个 Rails 4 应用程序,根据最佳实践,它以 UTC 格式将日期存储在我的 MySQL 数据库中。还行吧。
但是,我有一个无法正常工作的场景。
我有一个事件管理器,它总是在寻找要运行的新事件(存储在数据库中)。这些事件根据用户在站点上的操作存储在数据库中。 DB 中的 events 表有一个 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 应始终存储在服务器本地时间。
【问题讨论】:
-
你能配置你的数据库to use UTC time吗?
-
感谢 mccannf。我终于将查询中的 NOW() 函数替换为 UTC_TIMESTAMP(),效果与您的建议相同。
标签: mysql ruby-on-rails time utc