Является ли Time.zone.now.to_date эквивалентом Date.today?
Является ли Time.zone.now.to_date эквивалентным Date.today?
Другой способ: Time.zone.now.to_date == Date.today всегда true?
Если нет, то какой лучший способ получить объект Date, соответствующий "сейчас" в часовом поясе приложения?
Ответ 1
Они не всегда одинаковы. Time.zone.now.to_date будет использовать часовой пояс приложений, а Date.today будет использовать часовой пояс серверов. Поэтому, если они лежат на разных датах, тогда они будут разными. Пример из моей консоли:
Я также написал небольшой вспомогательный метод Date.today_in_zone, который позволяет очень легко получить "сегодня" Date для определенного часового пояса без изменения Time.zone:
# Defaults to using Time.zone
> Date.today_in_zone
=> Fri, 26 Oct 2012
# Or specify a zone to use
> Date.today_in_zone('Sydney')
=> Sat, 27 Oct 2012
Чтобы использовать его, просто выбросьте его в файл, например 'lib/date_extensions.rb' и require 'date_extensions'.
class Date
def self.today_in_zone(zone = ::Time.zone)
::Time.find_zone!(zone).today
end
end
Ответ 3
Я думаю, что лучший способ - узнать текущее время через:
Time.current
Это автоматически проверяет, есть ли у вас часовой пояс, тогда он вызовет Time.zone.now, но если вы его не вызовете просто Time.now.
Кроме того, не забудьте установить часовой пояс в application.rb