Как я могу запросить базу данных, которая хранит время в utc, с ruby?

Я в Центральном часовом поясе (ENV['TZ'] = America/Chicago), но все мои записи MongoDB хранятся в формате UTC. Поэтому, если я хочу запросить записи за вчерашний день, мне приходится перекомпенсировать часовой пояс:

tz = 5.hours
 d1 = Date.yesterday.at_midnight + tz
 d2 = d1 + 1.day
 Entry.where(:created_at.gte => d1, :created_at.lt => d2)

Я уверен, что это серьезный взлом, но я не уверен, как правильно это исправить? Должно ли оно находиться в конце базы данных или в коде. Есть ли некоторые ресурсы для чтения, которые учат тому, как это сделать правильно?

1 ответ

Предполагая, что ваше приложение Rails настроено на использование UTC (см. config.time_zone в config/application.rb), вы сможете использовать Time.zone... для создания своих дат.

Я в Тихоокеанском времени, мое приложение находится в UTC:

> Time.now
=> 2013-09-10 15:14:46 -0700
> Time.zone.now
=> Tue, 10 Sep 2013 22:14:48 UTC +00:00

Я не знаю о Mongoid, но ActiveRecord сделает это за вас:

> Course.where(['created_at < ?', Time.now]).to_sql
=> "SELECT \"courses\".* FROM \"courses\" WHERE (created_at < '2013-09-10 22:16:27.106841')"
> Course.where(['created_at < ?', Time.zone.now]).to_sql
=> "SELECT \"courses\".* FROM \"courses\" WHERE (created_at < '2013-09-10 22:17:03.236353')"

licensed under cc by-sa 3.0 with attribution.