Как timedelta перевести в int
Для форматирования объектов date и time в обоих этих классах предусмотрен метод strftime(format) . Этот метод принимает только один параметр, указывающий на формат, в который нужно преобразовать дату или время.
Для определения формата мы можем использовать один из следующих кодов форматирования:
- %a : аббревиатура дня недели. Например, Wed — от слова Wednesday (по умолчанию используются английские наименования)
- %A : день недели полностью, например, Wednesday
- %b : аббревиатура названия месяца. Например, Oct (сокращение от October)
- %B : название месяца полностью, например, October
- %d : день месяца, дополненный нулем, например, 01
- %m : номер месяца, дополненный нулем, например, 05
- %y : год в виде 2-х чисел
- %Y : год в виде 4-х чисел
- %H : час в 24-х часовом формате, например, 13
- %I : час в 12-ти часовом формате, например, 01
- %M : минута
- %S : секунда
- %f : микросекунда
- %p : указатель AM/PM
- %c : дата и время, отформатированные под текущую локаль
- %x : дата, отформатированная под текущую локаль
- %X : время, форматированное под текущую локаль
Используем различные форматы:
from datetime import datetime now = datetime.now() print(now.strftime("%Y-%m-%d")) # 2017-05-03 print(now.strftime("%d/%m/%Y")) # 03/05/2017 print(now.strftime("%d/%m/%y")) # 03/05/17 print(now.strftime("%d %B %Y (%A)")) # 03 May 2017 (Wednesday) print(now.strftime("%d/%m/%y %I:%M")) # 03/05/17 01:36
При выводе названий месяцев и дней недели по умолчанию используются английские наименования. Если мы хотим использовать текущую локаль, то мы можем ее предварительно установить с помощью модуля locale:
from datetime import datetime import locale locale.setlocale(locale.LC_ALL, "") now = datetime.now() print(now.strftime("%d %B %Y (%A)")) # 03 Май 2017 (среда)
Сложение и вычитание дат и времени
Нередко при работе с датами возникает необходимость добавить к какой-либо дате определенный промежуток времени или, наоборот, вычесть некоторый период. И специально для таких операций в модуле datetime определен класс timedelta . Фактически этот класс определяет некоторый период времени.
Для определения промежутка времени можно использовать конструктор timedelta:
timedelta([days] [, seconds] [, microseconds] [, milliseconds] [, minutes] [, hours] [, weeks])
В конструктор мы последовательно передаем дни, секунды, микросекунды, миллисекунды, минуты, часы и недели.
Определим несколько периодов:
from datetime import timedelta three_hours = timedelta(hours=3) print(three_hours) # 3:00:00 three_hours_thirty_minutes = timedelta(hours=3, minutes=30) # 3:30:00 two_days = timedelta(2) # 2 days, 0:00:00 two_days_three_hours_thirty_minutes = timedelta(days=2, hours=3, minutes=30) # 2 days, 3:30:00
Используя timedelta, мы можем складывать или вычитать даты. Например, получим дату, которая будет через два дня:
from datetime import timedelta, datetime now = datetime.now() print(now) # 2017-05-03 17:46:44.558754 two_days = timedelta(2) in_two_days = now + two_days print(in_two_days) # 2017-05-05 17:46:44.558754
Или узнаем, сколько было времени 10 часов 15 минут назад, то есть фактически нам надо вычесть из текущего времени 10 часов и 15 минут:
from datetime import timedelta, datetime now = datetime.now() till_ten_hours_fifteen_minutes = now - timedelta(hours=10, minutes=15) print(till_ten_hours_fifteen_minutes)
Свойства timedelta
Класс timedelta имеет несколько свойств, с помощью которых мы можем получить временной промежуток:
- days : возвращает количество дней
- seconds : возвращает количество секунд
- microseconds : возвращает количество микросекунд
Кроме того, метод total_seconds() возвращает общее количество секунд, куда входят и дни, и собственно секунды, и микросекунды.
Например, узнаем какой временной период между двумя датами:
from datetime import timedelta, datetime now = datetime.now() twenty_two_may = datetime(2017, 5, 22) period = twenty_two_may - now print("<> дней <> секунд <> микросекунд".format(period.days, period.seconds, period.microseconds)) # 18 дней 17537 секунд 72765 микросекунд print("Всего: <> секунд".format(period.total_seconds())) # Всего: 1572737.072765 секунд
Сравнение дат
Также как и строки и числа, даты можно сравнивать с помощью стандартных операторов сравнения:
from datetime import datetime now = datetime.now() deadline = datetime(2017, 5, 22) if now > deadline: print("Срок сдачи проекта прошел") elif now.day == deadline.day and now.month == deadline.month and now.year == deadline.year: print("Срок сдачи проекта сегодня") else: period = deadline - now print("Осталось <> дней".format(period.days))
Как timedelta перевести в int
Текстовые метки: python, date, time, datetime, timedelta, interval, to str, to string, convert, humanfriendly
Раздел: Информационные технологии — Python
Запись: and-semakin/mytetra_data/master/base/153087220744fur9qj42/text.html на raw.githubusercontent.com
# arbitrary number of seconds
s = s — (hours * 3600)
seconds = s — (minutes * 60)
print ‘%s:%s:%s’ % (hours, minutes, seconds)
hours, remainder = divmod(s, 3600)
minutes, seconds = divmod(remainder, 60)
print ‘%s:%s:%s’ % (hours, minutes, seconds)
pip install humanfriendly
from datetime import timedelta
delta = timedelta(seconds = 321)
# ‘5 minutes and 21 seconds’
- Закодировать файл в base64 на Python
- Рекурсивное создание директорий в Python
- Сортировка в Python
- Правильно добавить год/месяц к дате в Python
- Отформатировать дату в Python
- Получить рабочую директорию и директорию со скриптом в Python
- Копия объекта в Python
- Время выполнения программы на Python
- Конвертировать datetime.timedelta в строку
- Парсинг даты в Python
- Конвертировать строку (str) в булевый тип (bool) в Python
- Получить местный часовой пояс в Python
- Проверить, что строка соответствует регулярному выражению в Python
- Просмотреть доступные версии модулей в PIP
- Получить целочисленный Unix timestamp в Python
- getter и setter в Python
- Настроить формат вывода логов в Python
- Получить переменную окружения в Python
- Обновить пакет в PIP
- Получить имя (хостнейм) машины из Python
- Вывести стэк вызовов при возникновении исключения в Python
- Функция eval в Python
- Дозаписывать (append) в файл в Python
- Препроцессинг кода в Python
- Проверить, что программа установлена из Python
- Настроить путь для импорта библиотек в Python
- Получить размер терминала в символах в Python
- Enum с дополнительными полями в Python
- Ошибка invalid command ‘bdist_wheel’ при установке пакета через PIP
- Получить список аргументов функции из Python
- Сделать словарь только для чтения в Python
- Заматчить любой символ, включая перевод строки, в регулярных выражениях на Python
- Получить список файлов в директории через pathlib в Python
- Вывести действительное число с округлением до нескольких символов после запятой в Python
- Вывод в терминал текста с цветами в Python
- Перезагрузить импортированный модуль в Python
- Безопасно создать список/словарь/любой объект из строкового представления в Python
- Аналог декоратора @property для методов класса в Python
- Перехватить ошибку TimeoutError в asyncio
- Отключить вывод логов в Python
- Уровни логгирования в Python
- Удалить *.pyc и __pycache__ файлы
- Выгрузить объект в JSON в Unicode в Python
- Конвертировать datetime в другую часовую зону в Python
- Дополнить строку нулями в Python
- Вычислить MD5 от строки в Python
- Удалить знаки пунктуации из строки в Python
- Проверить, что первая буква в строке — заглавная, в Python
- Разбить (split) строку по нескольким разделителям в Python
- Отсортировать версии в Python
- Распаковать любой архив в Python
- Получить имя текущего скрипта на Python
- Установка pip на Python 2.6
- Отличить печатаемый символ Unicode от непечатаемого на Python
- Вывести версию интерпретатора Python в машиночитаемом виде
- Найти место, куда Python устанавливает пакеты (dist-packages, site-packages)
Класс timedelta() модуля datetime в Python
Интервал времени timedelta, поддерживаемые операции
Синтаксис:
import datetime delta = datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Параметры:
Все аргументы являются необязательными и по умолчанию равны 0. Аргументы могут быть целыми числами или числами с плавающей запятой и могут быть положительными или отрицательными.
- days=0 — день,
- seconds=0 — секунды,
- microseconds=0 — микросекунды,
- milliseconds=0 — миллисекунды,
- minutes=0 — минуты,
- hours=0 — часы,
- weeks=0 — недели.
Возвращаемое значение:
Описание:
Класс timedelta() модуля datetime представляет собой продолжительность, разницу между двумя датами или временем.
Экземпляр datetime.timedelta продолжительность хранит как сочетание days , seconds и microseconds , а остальные переданные в конструктор аргументы конвертируются в эти единицы:
- millisecond преобразуется в 1000 microseconds .
- minute преобразуется в 60 seconds .
- hour преобразуется в 3600 seconds .
- week преобразуется в 7 days .
days , seconds и microseconds затем нормализуются так, чтобы представление было уникальным:
В следующем примере показано, как любые аргументы, кроме days , seconds и microseconds объединяются и нормализуются в эти три результирующих атрибута:
>>> from datetime import timedelta >>> delta = timedelta( . days=50, . seconds=27, . microseconds=10, . milliseconds=29000, . minutes=5, . hours=8, . weeks=2 . ) # Остались только дни, секунды и микросекунды >>> delta # datetime.timedelta(days=64, seconds=29156, microseconds=10) >>> delta.days # 64 >>> delta.seconds # 29156 >>> delta.microseconds # 10 >>> delta.total_seconds() # 5558756.00001
Если какой-либо аргумент представляет собой число float и есть дробные микросекунды и микросекунды, оставшиеся от всех аргументов, то они объединяются, а их сумма округляется до ближайшей микросекунды с использованием прерывателя с округлением от половины до четности. Если аргумент не является float , то процессы преобразования и нормализации являются точными, информация не теряется.
Если нормализованное значение дней находится за пределами диапазона -999999999
Обратите внимание, что нормализация отрицательных значений может сначала удивить. Например:
>>> from datetime import timedelta >>> d = timedelta(microseconds=-1) >>> (d.days, d.seconds, d.microseconds) # (-1, 86399, 999999)
Продолжительность timedelta имеет 1 метод:
delta.total_seconds() :
Метод timedelta.total_seconds() возвращает общее количество секунд, содержащихся в продолжительности timedelta . Эквивалент td/timedelta(seconds=1) .
Для интервальных единиц, отличных от секунд, используйте форму деления напрямую, например td/timedelta(microseconds=1) .
Обратите внимание, что для очень больших временных интервалов более 270 лет на большинстве платформ этот метод теряет микросекундную точность.
Поддерживаемые операции timedelta :
>>> datetime.timedelta(days=-1, seconds=68400) >>> print(_) # -1 day, 19:00:00
В дополнение к операциям, перечисленным выше, объекты datetime.timedelta поддерживают определенные дополнения и вычитания с объектами date и datetime . Смотрите «Частые приемы работы c datetime.timedelta «.
Поддерживаются сравнения объектов datetime.timedelta с некоторыми оговорками.
Сравнения == или != всегда возвращают bool , независимо от типа сравниваемого объекта:
>>> from datetime import timedelta >>> delta1 = timedelta(seconds=57) >>> delta2 = timedelta(hours=25, seconds=2) >>> delta2 != delta1 # True >>> delta2 == 5 # False
Для всех других сравнений, таких < как >и когда объект timedelta сравнивается с объектом другого типа, вызывается исключение TypeError :
>>> delta2 > delta1 # True >>> delta2 > 5 # Traceback (most recent call last): # File "", line 1, in # TypeError: '>' not supported between instances of 'datetime.timedelta' and 'int'
В булевых контекстах объект timedelta считается истинным тогда и только тогда, когда он не равен datetime.timedelta(0) .
Дополнительный пример нормализации:
>>> # Components of another_year add up to exactly 365 days >>> from datetime import timedelta >>> year = timedelta(days=365) # Компоненты 'another_year' составляют ровно 365 дней >>> another_year = timedelta(weeks=40, days=84, hours=23, . minutes=50, seconds=600) >>> year == another_year # True >>> year.total_seconds() # 31536000.0
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Класс timedelta() модуля datetime
- Примеры использования datetime.timedelta()
- Класс date() модуля datetime
- Методы экземпляра datetime.date()
- Примеры использования datetime.date()
- Класс datetime() модуля datetime
- Методы экземпляра datetime.datetime()
- Примеры работы с модулем datetime
- Класс time() модуля datetime
- Класс tzinfo() модуля datetime
- Класс timezone() модуля datetime
- Правила форматирования strftime() и strptime() модуля datetime
Приемы работы с datetime.timedelta()
В этом разделе представлены частые приемы работы длительностью или интервалом времени datetime.timedelta() , а так же арифметика c datetime.timedelta .
Содержание:
- Примеры арифметики c datetime.timedelta() ,
- Преобразование интервала datetime.timedelta() в секунды.
- Форматирование вывода интервала времени,
- Подсчет дней до или после события,
- Подсчет прошедших и предстоящих дат.
- Использование месяца, при расчете интервала timedelta .
Примеры арифметики c datetime.timedelta() :
>>> from datetime import timedelta >>> year = timedelta(days=365) >>> ten_years = 10 * year >>> ten_years # datetime.timedelta(days=3650) >>> ten_years.days # 3650 >>> ten_years.days // 365 # 10 >>> nine_years = ten_years - year >>> nine_years # datetime.timedelta(days=3285) >>> three_years = nine_years // 3 >>> three_years, three_years.days // 365 # (datetime.timedelta(days=1095), 3)
Преобразование интервала datetime.timedelta() в секунды:
>>> import datetime >>> delta = datetime.timedelta(minutes=1) >>> delta.total_seconds() # 60.0 >>> delta = datetime.timedelta(hours=1, minutes=1) >>> delta.total_seconds() # 3660.0 >>> delta = datetime.timedelta(days=1, hours=1, minutes=1) >>> delta.total_seconds() # 90060.0 >>> delta = datetime.timedelta(weeks=3, days=5) >>> delta.total_seconds() # 2246400.0 # Интервал между датами >>> date1 = datetime.datetime.now() >>> date2 = datetime.datetime(2021, 1, 1) >>> delta = date2 - date1 >>> delta.total_seconds() # 20662333.983181
Форматирование вывода интервала времени datetime.timedelta() .
Для объектов datetime.timedelta нет встроенного средства форматирования, но это довольно легко сделать самостоятельно:
import datetime def timedelta_to_hms(duration): # преобразование в часы, минуты и секунды days, seconds = duration.days, duration.seconds hours = days * 24 + seconds // 3600 minutes = (seconds % 3600) // 60 seconds = (seconds % 60) return hours, minutes, seconds def timedelta_to_dhms(duration): # преобразование в дни, часы, минуты и секунды days, seconds = duration.days, duration.seconds hours = seconds // 3600 minutes = (seconds % 3600) // 60 seconds = (seconds % 60) return days, hours, minutes, seconds
Узнаем сколько прошло времени с события.
# узнаем сколько прошло с 13 января до сегодня >>> td = datetime.datetime.now() - datetime.datetime(2020, 1, 13) >>> days, hours, minutes, seconds = timedelta_to_dhms(td) >>> print(f'days> days, hours> hours, minutes> minutes') # 112 days, 18 hours, 16 minutes
Узнаем сколько осталось времени до события.
# узнаем сколько часов осталось до 1 июня >>> td = datetime.datetime(2020, 6, 1) - datetime.datetime.now() >>> hours, minutes, seconds = timedelta_to_hms(td) >>> print(f'hours> hours, minutes> minutes') # 653 hours, 39 minutes
Пример подсчета дней до события.
>>> import datetime >>> today = datetime.datetime.now() >>> date = datetime.datetime(2020, 7, 14) >>> delta = date - today >>> delta.days # 69 # функция `timedelta_to_dhms()` создана выше # в подразделе Форматирование вывода >>> days, hours, minutes, _ = timedelta_to_dhms(delta) >>> print(f'days> days, hours> hours, minutes> minutes') 69 days, 10 hours, 46 minutes
>>> import datetime >>> today = datetime.date.today() >>> date = datetime.date(today.year, 7, 14) >>> delta = date - today >>> delta.days # 70 # функция `timedelta_to_dhms()` создана выше # в подразделе Форматирование вывода >>> days, hours, minutes, _ = timedelta_to_dhms(delta) >>> print(f'days> days, hours> hours, minutes> minutes') 69 days, 0 hours, 0 minutes
Подсчет прошедших и предстоящих дат.
Узнаем дату «дня программиста«. Как известно, день программиста приходится на 256 день в году.
>>> import datetime # текущая дата, из который нужно вытащить год today = datetime.date.today() # дата начала года >>> first_day_year = datetime.date(today.year, 1, 1) # разница в 256 дней >>> delta = datetime.timedelta(days=256) >>> prog_day = first_day_year + delta >>> print(f'prog_day.day>.prog_day.month>.prog_day.year>') # 14.9.2022
Узнаем, какая дата будет через 3 недели и 5 дней.
>>> import datetime >>> today = datetime.datetime.now() >>> today # datetime.datetime(2020, 5, 6, 20, 10, 5, 57219) >>> print(f'today.day>.today.month>.today.year>') # 6.5.2020 >>> delta = datetime.timedelta(weeks=3, days=5) >>> date = today + delta >>> date # datetime.datetime(2020, 6, 1, 20, 10, 5, 57219) >>> print(f'date.day>.date.month>.date.year>') # 1.6.2020
Узнаем, какая дата была 100 дней назад.
>>> import datetime >>> today = datetime.datetime.now() >>> today # datetime.datetime(2020, 5, 6, 20, 10, 34, 792857) >>> print(f'today.day>.today.month>.today.year>') # 6.5.2020 >>> delta = datetime.timedelta(days=100) >>> date = today - delta >>> date # datetime.datetime(2020, 1, 27, 20, 10, 34, 792857) >>> print(f'date.day>.date.month>.date.year>') # 27.1.2020
Узнаем, какое время будет через 1 час 30 минут и 45 секунд.
>>> import datetime >>> today = datetime.datetime.now() >>> today # datetime.datetime(2020, 5, 6, 20, 11, 2, 522895) >>> print(f'today.hour>:today.minute>:today.second>') # 20:11:2 >>> delta = datetime.timedelta(hours=1, minutes=30, seconds=45) >>> date = today + delta >>> date # datetime.datetime(2020, 5, 6, 21, 41, 47, 522895) >>> print(f'date.hour>:date.minute>:date.second>') # 21:41:47
Использование месяца, при расчете интервала timedelta .
В конструкторе объекта datetime.timedelta() нет аргумента, отвечающего за месяц, следовательно его надо рассчитывать. Как тогда точно рассчитать количество дней в нескольких месяцах, если количество дней в месяцах разное? А если расчеты выпадут на февраль и да еще год високосный?
Для подсчета дней в месяцах можно воспользоваться функцией calendar.monthrange() встроенного модуля calendar . Рассчитаем дату, которая будет через 3 месяца и 6 дней от текущей:
import datetime, calendar, locale # переменные для расчета даты # через 3 месяца и 6 дней month = 3 day = 6 # текущая дата today = datetime.date.today() # расчет количества дней в 3-х месяцах sum_mont = 0 for i in range(today.month, today.month+month): _, month_days = calendar.monthrange(today.year, i) sum_mont += month_days # количество дней до назначенной даты total_days = sum_mont + day # рассчитываем дельту delta = datetime.timedelta(days=total_days) # вычисляем дату deadline = today + delta print(f'deadline.day>.deadline.month>.deadline.year>') # номер дня недели (0-понедельник) n_weekday = calendar.weekday(deadline.year, deadline.month, deadline.day) print(f'Номер дня недели => n_weekday>') #выбираем русскую локаль, если нужны # названия дней недели в кириллице locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8') # название дня недели day_name = calendar.day_name[n_weekday] print(f'Название дня недели => day_name>') # сокращенное название дня недели day_abbr = calendar.day_abbr[n_weekday] print(f'Сокращенное название дня недели => day_abbr>') # 17.5.2022 # Номер дня недели => 1 # Название дня недели => Вторник # Сокращенное название дня недели => Вт
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Класс timedelta() модуля datetime
- Примеры использования datetime.timedelta()
- Класс date() модуля datetime
- Методы экземпляра datetime.date()
- Примеры использования datetime.date()
- Класс datetime() модуля datetime
- Методы экземпляра datetime.datetime()
- Примеры работы с модулем datetime
- Класс time() модуля datetime
- Класс tzinfo() модуля datetime
- Класс timezone() модуля datetime
- Правила форматирования strftime() и strptime() модуля datetime