У меня есть datetime
объект, созданный с использованием strptime()
.
>>> tm
datetime.datetime(2010, 6, 10, 3, 56, 23)
Мне нужно округлить минуту до ближайшей 10-й минуты. До этого момента я брал значение минут и использовал для него round ().
min = round(tm.minute, -1)
Однако, как и в приведенном выше примере, он дает недопустимое время, если значение минут больше 56, то есть: 3:60
Как лучше это сделать? datetime
Поддерживает ли это?
dt.replace(hour=0, minute=0, second=0)
вместоdt.min
.roundTime(datetime.datetime(2012,12,31,23,44,59,1234),roundTo=60*60*24*7)
vsroundTime(datetime.datetime(2012,12,30,23,44,59,1234),roundTo=60*60*24*7)
datetime.timedelta(100,1,2,3).seconds == 1
Из лучшего ответа, который я изменил на адаптированную версию, используя только объекты datetime, это позволяет избежать преобразования в секунды и делает вызывающий код более читаемым:
Образцы с округлением 1 час и 15 минут:
источник
print roundTime(datetime.datetime(2012,12,20,23,44,49),datetime.timedelta(days=15))
2012-12-20 00:00:00
whileprint roundTime(datetime.datetime(2012,12,21,23,44,49),datetime.timedelta(days=15))
2012-12-21 00:00:00
Я использовал код Stijn Nevens (спасибо, Stijn) и хочу поделиться небольшим дополнением. Округление в большую и меньшую сторону и до ближайшего.
обновление 2019-03-09 = комментарий Spinxz включен; Спасибо.
обновление 2019-12-27 = комментарий Барт включен; Спасибо.
Проверено на date_delta «X часов», «X минут» или «X секунд».
источник
up
любом случае округление в этой функции неточно;2019-11-07 14:39:00.776980
сdate_delta
равным, например, 30 секундам иto='up'
приводит к2019-11-07 14:39:00
.up
округление может быть не обычным вариантом использования, оно необходимо, когда вы имеете дело с приложениями, которые начинаются с минутной границыPandas имеет функцию округления даты и времени, но, как и большинство вещей в Pandas, она должна быть в формате серии.
Документы - при необходимости измените строку частоты.
источник
Timestamp
содержитfloor
иceil
такжеесли вы не хотите использовать условие, вы можете использовать
modulo
оператор:ОБНОВИТЬ
ты хотел что-то подобное?
.. если вы хотите получить результат в виде строки. для получения результата datetime лучше использовать timedelta - см. другие отзывы;)
источник
я использую это. его преимущество заключается в том, что он работает с датами с учетом tz.
его недостаток состоит в том, что он работает только для временных интервалов менее часа.
источник
Вот более простое обобщенное решение без проблем с точностью с плавающей запятой и зависимостей от внешних библиотек:
В твоем случае:
источник
Простой подход:
источник
источник
Основано на Stijn Nevens и модифицировано для использования Django для округления текущего времени до ближайших 15 минут.
если вам нужна полная дата и время, просто удалите
.strftime('%H:%M:%S')
источник
Не самый лучший вариант для скорости при обнаружении исключения, однако это сработает.
Сроки
источник
Двухстрочное интуитивно понятное решение для округления до заданной единицы времени, здесь секунды, для
datetime
объектаt
:Если вы хотите округлить до другой единицы, просто измените
format_str
.Этот подход не округляет до произвольных значений времени, как вышеупомянутые методы, но представляет собой прекрасный питоновский способ округления до заданного часа, минуты или секунды.
источник
Другое решение:
Надеюсь это поможет!
источник
Самый короткий путь, который я знаю
источник
Это кажется слишком сложным
источник
да, если ваши данные принадлежат столбцу DateTime в серии pandas, вы можете округлить их, используя встроенную функцию pandas.Series.dt.round. Смотрите документацию здесь, на pandas.Series.dt.round . В вашем случае округления до 10 минут это будет Series.dt.round ('10min') или Series.dt.round ('600s'), например:
Отредактируйте, чтобы добавить Пример кода:
источник