Скажем, у меня есть объект datetime, например DateTime.now
. Я хочу установить часы и минуты на 0 (полночь). Как я могу это сделать?
104
Благодаря ActiveSupport вы можете использовать:
DateTime.now.midnight
DateTime.now.beginning_of_day
ИЛИ
DateTime.now.change({ hour: 0, min: 0, sec: 0 })
# More concisely
DateTime.now.change({ hour: 0 })
now = DateTime.now
DateTime.new(now.year, now.month, now.day, 0, 0, 0, now.zone)
ИЛИ
now = DateTime.now
DateTime.parse(now.strftime("%Y-%m-%dT00:00:00%z"))
DateTime.new(now.year, now.month, now.day, 0,0,0, now.zone) != now.to_date.to_datetime
Неважно, понял. Необходимо создать новый DateTime:
источник
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)
это работает.now = DateTime.now
DateTime
. У вас будут неприятные проблемы, если вы живете в стране с летним временем, например в Великобритании. См. Объяснение здесь. gist.github.com/pixeltrix/e2298822dd89d854444bПредупреждение :
DateTime.now.midnight
иDateTime.now.beginning_of_day
вернуть то же значение (это нулевой час текущего дня - полночь не возвращает 24:00:00, как можно было бы ожидать от ее имени).Поэтому я добавляю это как дополнительную информацию для всех, кто может использовать принятый ответ для вычисления полуночи x дней в будущем.
Например, 14-дневная бесплатная пробная версия, срок действия которой истекает в полночь 14-го дня:
- утро 14-го дня, что соответствует 13-дневной пробной версии (x - оставшаяся часть дня - если сейчас полдень, то это 13,5-дневная пробная версия).
Вам действительно нужно сделать это:
чтобы получить полночь 14-го дня.
По этой причине я всегда предпочитаю использовать
beginning_of_day
, так как это 00:00:00. Использование полуночи может ввести в заблуждение или неправильно понять.источник
Если вы часто его используете, подумайте об установке этого драгоценного камня, чтобы улучшить анализ даты:
https://github.com/mojombo/chronic
источник