Что такое классный способ обрезать объект даты и времени Python?
В данном конкретном случае до дня. Таким образом, в общем случае установка часов, минут, секунд и микросекунд на 0.
Я хотел бы, чтобы выходные данные также были объектом datetime, а не строкой.
replace()
метод возвращает объект DateTime, поэтому правильное заклинание будет:dt = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
datetime
, а неdate
объект (который вы можете получить с помощьюdt.date()
call (нет необходимости использовать явный конструктор))..replace()
Метод может потерпеть неудачу , еслиdatetime
добавляет поддержку наносекунд . Вы могли бы использоватьdatetime.combine()
вместо этого .datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
?Используйте
date
не,datetime
если вы не заботитесь о времени.Вы можете обновить дату и время следующим образом:
источник
Четыре года спустя: другой путь, избегая
replace
Я знаю, что принятый ответ от четырехлетней давности работает, но это кажется немного легче, чем при использовании
replace
:Ноты
datetime
объект без передачи свойств времени конструктору, вы получаете полночь.dt = datetime.datetime.now()
источник
Вы не можете усечь объект datetime, потому что он неизменен .
Тем не менее, вот один из способов создать новое время даты с полями 0 час, минута, секунда и микросекунды, не выбрасывая исходную дату или tzinfo:
источник
replace
опцию первым, так как это, вероятно, то, что они хотят.tzinfo=now.tzinfo
. Вtzinfo
полночь может отличаться, например, смещение utc в2012-04-01 00:09:00
(9:00) в часовом поясе Австралия / Мельбурн,AEST+10:00
но этоAEDT+11:00
в2012-04-01 00:00:00
(полночь) - в этот день происходит переход на конец летнего времени. Вы можете использоватьpytz
модуль, чтобы исправить это, смотрите мой ответ.Чтобы получить полночь, соответствующую данному объекту datetime, вы можете использовать
datetime.combine()
метод :Преимущество по сравнению с по
.replace()
методу является то , чтоdatetime.combine()
основанное решение будет продолжать работать , даже еслиdatetime
модуль вводит поддержку наносекунд .tzinfo
может быть сохранено при необходимости, но смещение utc может быть другим в полночь, например, из-за перехода на летнее время, и поэтому простое решение (установкаtzinfo
атрибута времени) может потерпеть неудачу. См. Как я могу получить время UTC «полуночи» для данного часового пояса?источник
Вы можете использовать панды для этого (хотя это может быть накладные расходы для этой задачи). Вы можете использовать round , floor и ceil, как для обычных чисел и любой частоты панд из смещенных псевдонимов :
источник
Вы можете использовать datetime.strftime, чтобы извлечь день, месяц, год ...
Пример :
Выход (на сегодня):
Если вы просто хотите получить день, вы можете использовать атрибут дня, например:
Ouput (на сегодня):
источник
d.day
и т. Д.Для манипулирования датами есть большая библиотека: Delorean
и если вы хотите вернуть значение datetime:
источник
Подробнее смотрите на https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.floor.html.
Сейчас 2019 год, я думаю, что самый эффективный способ сделать это:
источник
Есть модуль datetime_truncate, который обрабатывает это для вас. Он просто вызывает datetime.replace.
источник
6 лет спустя ... Я нашел этот пост, и мне больше понравился этот тупой подход:
ура
источник
источник
Вы можете просто использовать
Это свет и возвращает именно то, что вы хотите.
источник
Что означает усечение?
Вы имеете полный контроль над форматированием, используя метод strftime () и используя соответствующую строку формата.
http://docs.python.org/library/datetime.html#strftime-strptime-behavior
источник
Если вы имеете дело с Series типа DateTime, существует более эффективный способ их усекать, особенно если в объекте Series много строк.
Вы можете использовать функцию пола
Например, если вы хотите сократить его до часов:
Генерация диапазона дат
Мы можем проверить это, сравнивая время выполнения функций замены и пола.
источник
Вот еще один способ, который умещается в одну строку, но не особенно элегантен:
источник