2014-09-27 4 views
7

У меня есть эти даты и времени:Дата сравнения/Время в рубин

schedule.day_start # => 2014-09-27 15:30:00 UTC 
date_now = Time.now # => 2014-09-27 15:11:14 +0200 
date_now + 60.minutes # => 2014-09-27 16:11:14 +0200 

Я пытаюсь определить все графики, которые начинаются 60 минут или менее до day_start. Со следующим кодом я получаю в качестве ответа "NO" вместо "YES".

if schedule.day_start < (Time.now + 60.minutes) 
    "YES" 
else 
    "NO" 
end 

Почему 2014-09-27 15:30:00 UTC больше 2014-09-27 16:11:14 +0200?

ответ

0

Поскольку

2014-09-27 16:11:14 +0200 

является одновременно с

2014-09-27 14:11:14 UTC 

поступающую к

2014-09-27 15:30:00 UTC 

С Time объектов, "следует" переводится как "больше".

+0

Благодарим вас за сообщение. Но не могли бы вы объяснить мне, пожалуйста, что вы подразумеваете под «С объектами времени», «следует» переводит на «больше».?? – user984621

+1

Если время «A» появляется после (т.е. ** следует **) времени «B» на временной шкале, тогда код «A> B» в Ruby будет «true» (т. Е. 'A' is ** больше * * чем 'B'). – sawa

9

Работа их датирована UTC, так что вы будете избежать проблем часового пояса

if schedule.day_start.utc < (Time.now + 60.minutes).utc 
    ... 
+0

Спасибо Benjamin за сообщение. Я попробовал, но 'Time.now.utc' показывает мне' 2014-09-27 14:10:14 UTC', но текущее время '2014-09-27 16:10:14 UTC'. Как сравнить эти две даты? ('schedule.day_start' показывает« правильную »дату - не' -2 часа') – user984621

+0

В каком контексте вы получаете 'Time.now'? Потому что, если, например, ему присваивается константа или глобальная переменная, она могла бы записать время, когда вы запустили свой сервер. Также проверьте правильность настройки «config.time_zone» и, конечно, если ваша система находится в нужное время с 'ntpdate' – Benj

0

Anywhere, если время А приходит после того, как время Б, то А считается больше, чем B. То же самое в вашем случае ,


schedule.day_start # => 2014-09-27 15:30:00 UTC

date_now + 60.minutes # => 2014-09-27 16:11:14 +0200 который является 2014-09-27 14:11:14 UTC.

Здесь вы можете ясно видеть, что Time.now + 60.minutes является метка перед тем schedule.day_start. Таким образом, schedule.day_start больше, чем Time.now + 60.minutes, поэтому ваш «if» чехол недействителен и, следовательно, NO.

Смежные вопросы