2014-10-15 1 views
0

У меня есть тест, который проверяет, был ли отправлен товар сегодня.RSpec тесты не работают, потому что дата в SQLite на один день впереди, чем системная дата

let(:todays_date) {I18n.l(Date.today, format: '%m/%d/%Y')}   
expect(order.shipped_date.strftime("%m/%d/%Y")).to eq(todays_date) 

Этот тест не со следующей ошибкой:

Failure/Error: expect(order.shipped_date.strftime("%m/%d/%Y")).to eq(todays_date)

expected: "10/14/2014"
got: "10/15/2014"

Когда я проверяю дату в SQLite на один день раньше, чем дата системы.

sqlite> select date('now'); 
2014-10-15 
sqlite> .exit 
[email protected]:~/tools/$ date 
Tue Oct 14 20:13:03 EDT 2014 

Я ценю любую помощь, которую вы можете предоставить.

Спасибо!

ответ

1

documentation говорит:

Universal Coordinated Time (UTC) is used.

Чтобы получить время в местном часовом поясе, используйте модификатор localtime:

select date('now', 'localtime'); 
+0

Thanks @CL! Вы знаете, как я получаю местное время через Rails ActiveRecord. Я попробовал order.shipped_date («localtime»), и это, похоже, терпит неудачу. –

+0

Попробуйте это как второй параметр для 'strftime', но я не знаю, поддерживает ли Rails эти модификаторы. –

0

Благодаря @CL, я решил это. Теперь я выбираю все даты в UTC, чтобы они сравнивались.

let(:todays_date) {I18n.l(Time.now.utc, format: '%m/%d/%Y')} 
Смежные вопросы