Метка времени MySQL отличается от Time.now в Ruby? - PullRequest
1 голос
/ 09 декабря 2011

В MySQL дБ для записей:

2011-12-09 07:59:00 UTC

В рубине если я сделаю Time.now:

2011-12-09 03:57:46 -0800

Как бы я сделал сравнение, подобное следующему? (что не работает)

<% if item.exp_date < Time.now %>
    Expired
<% end %>

PS. Было бы замечательно, если бы было решение, в котором я не должен предполагать , если в БД хранится время, заканчивающееся на UTC или -0800

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Сравнение даты / времени с использованием > и < должно работать нормально независимо от часовых поясов.

[chris@chipbook:~/coding%] pry
[1] pry(main)> a = Time.now
=> 2011-12-09 23:09:14 +1100
[2] pry(main)> b = Time.now.utc
=> 2011-12-09 12:09:44 UTC
[3] pry(main)> a < b
=> true
[4] pry(main)> 

Если вы хотите заставить времена использовать эталонный часовой пояс для согласованности, позвоните по номеру #utc.

1 голос
/ 09 декабря 2011

Оказывается, проблема была в том, что я использовал NOW() в запросах к mysql.

Добавление следующего к /etc/my.cnf исправило проблему:

[mysqld_safe]
timezone = UTC
0 голосов
/ 09 декабря 2011

Часовой пояс Rails по умолчанию - UTC, и ActiveRecord автоматически преобразует время в этот. Вы можете установить его в config / application.rb. Для сравнения времени вы можете использовать Time.zone.now, что относится к часовому поясу, установленному в application.rb. Вы можете проверить, какие часовые пояса доступны с $ rake time:zones:all.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...