DateTime.now или Time.now?
Какой из двух я должен использовать в своем приложении Rails:
DateTime.now or Time.now
Есть ли вред при использовании обоих в приложении?
Могут ли быть какие-либо различия между ними в случае вышеупомянутого примера (now
)? (В моей текущей системе они оба показывают одно и то же время)
Ответы
Ответ 1
В отношении Time.now
(не DateTime.now
):
Созданный объект будет создан с использованием разрешения, доступного на системных часах, и поэтому может включать дробные секунды.
a = Time.new #=> Wed Apr 09 08:56:03 CDT 2003
b = Time.new #=> Wed Apr 09 08:56:03 CDT 2003
a == b #=> false
"%.6f" % a.to_f #=> "1049896563.230740"
"%.6f" % b.to_f #=> "1049896563.231466"
Ответ 2
Используйте (Date)Time.current
вместо (Date)Time.now
Rails расширяет объекты Time
и DateTime
и включает свойство current
для получения времени, в которое устанавливается среда Rails (по умолчанию = UTC), в отличие от времени сервера (может быть что угодно).
Это очень важно. Вы всегда должны работать в UTC, кроме случаев, когда конвертируются между часовыми поясами для ввода или отображения пользователей, но по умолчанию многие производственные системы не являются UTC. (например, Heroku установлен в PST (GMT -8))
См. статью здесь
Ответ 3
Если вы хотите получить время в часовом поясе приложения, вам нужно позвонить Time.zone.now
, чтобы я обычно использовал.
Time.now
и DateTime.now
будут возвращать время в системном времени, которое часто устанавливается на UTC.