un Time
è un certo numero di secondi il peccato ce un epoca mentre un DateTime
è un numero di giorni da un'epoca, motivo per cui aggiungere 1
a DateTime
aggiunge un'intera giornata. tuttavia è possibile aggiungere le frazioni di un giorno, per esempio
d = DateTime.now
d + Rational(10, 86400)
Aggiungerà 10 secondi per d
(dato che ci sono 86400 secondi in un giorno).
Se si utilizza Rails, ActiveSupport aggiunge alcuni metodi di supporto e si può fare
d + 20.minutes + 10.seconds
che farà la cosa giusta è d
è un DateTime
o un Time
. È possibile utilizzare ActiveSupport da solo e in questi giorni è possibile inserire solo i bit necessari. Mi sembra di ricordare che questa roba è in activesupport/duration
. Credo ci siano altre gemme che offrono aiuto anche nel gestire il tempo.
fonte
2012-04-07 16:27:22
Personalmente preferisco scrivere '60 * 60 * 24' per rendere un po 'più ovvio il punto da cui viene il numero magico, anche se ovviamente sarà molto più lento in fase di esecuzione. –
@AndrewMarshall È d'accordo, e a meno che uno stia eseguendo la manipolazione di 'DateTime' milioni su milioni di volte, altre due operazioni di moltiplicazione non valgono * micro-ottimizzazione *. Non pensarci nemmeno finché non ti imbatti in un problema di prestazioni.Ancora meglio, che ne dici di dichiarare una costante all'inizio del codice? 'SECONDS_PER_DAY = 60 * 60 * 24', e usalo. Lo stesso potrebbe essere fatto per 'MINUTERS_PER_DAY = 60 * 24' e' HOURS_PER_DAY = 24', anche se forse l'ultimo non è necessario, ma è bello essere coerenti e basta elencarli tutti. –