Перейти к содержимому

Как timedelta перевести в int

  • автор:

Как 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *