2014-09-27 15 views
7

ho queste date e gli orari:Data confronto/ora in Ruby

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 

sto cercando di rilevare tutti i programmi che si avviano 60 minuti o meno prima day_start. Con il seguente codice, ottengo come risposta "NO" anziché "YES".

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

Perché 2014-09-27 15:30:00 UTC grande di 2014-09-27 16:11:14 +0200?

risposta

0

Poiché

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

è simultaneo a

2014-09-27 14:11:14 UTC 

che viene prima

2014-09-27 15:30:00 UTC 

Con Time oggetti, "segue" traduce "maggiore".

+0

Grazie, Sawa, per il tuo messaggio. Ma potresti spiegarmi, per favore, cosa intendi con 'Con gli oggetti del tempo," segue "si traduce in" maggiore ".'? – user984621

+1

Se il tempo 'A' viene dopo (cioè ** segue **) tempo' B' sulla scala temporale, quindi il codice 'A> B' in Ruby sarebbe' true' (cioè, 'A' è ** maggiore * * di 'B'). – sawa

9

lavoro li date come UTC, in modo da evitare problemi di fuso orario

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

Grazie Benjamin per il tuo messaggio. L'ho provato, ma 'Time.now.utc' mi mostra' 2014-09-27 14:10:14 UTC', ma l'ora corrente è '2014-09-27 16:10:14 UTC'. Come confrontare queste due date allora? ('schedule.day_start' mostra la data" corretta "- non' -2 ore') – user984621

+0

In quale contesto ottieni 'Time.now'? Perché se ad esempio è assegnato a una variabile costante o globale potrebbe registrare l'ora in cui hai avviato il tuo server. Controlla anche se hai impostato correttamente 'config.time_zone' e, ovviamente, se il tuo sistema è al momento giusto con' ntpdate' – Benj

0

Anywhere, se il tempo viene dopo un tempo di B, allora A è considerato essere maggiore di B. La stessa cosa nel tuo caso .


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

date_now + 60.minutes # => 2014/09/27 16:11:14 +0200 che è il 2014-09-27 14:11:14 UTC.

Qui, si può chiaramente vedere che, Time.now + 60.minutes è un timestamp prima schedule.day_start. Quindi, schedule.day_start è maggiore di Time.now + 60.minutes, ecco perché il tuo caso "" if " non è valido e quindi NO viene stampato.

Problemi correlati