Сколько дней прошло между двумя датами питон

Вычисление количества дней между датами и определение дат через количество дней

Задача 1. Вводятся две даты. Определить количество дней между ними.

from datetime import date print('Date format: YYYY-MM-DD') a = input('First date: ') b = input('Second date: ') aa = date.fromisoformat(a) bb = date.fromisoformat(b) delta = abs(aa - bb) print(delta.days)
Date format: YYYY-MM-DD First date: 2023-10-01 Second date: 2023-10-03 2
Date format: YYYY-MM-DD First date: 2022-07-06 Second date: 2023-07-06 365

Задача 2. Определить количество дней между заданной датой и сегодняшним днем. Если указанная дата — прошлое, выразить количество дней как отрицательное число, если будущее — как положительное.

from datetime import date t = date.today() print('Today:', t) a = input('Other date: ') aa = date.fromisoformat(a) print((aa - t).days)
Today: 2023-07-06 Other date: 2023-07-01 -5
Today: 2023-07-06 Other date: 2023-08-07 32

Задача 3. Определить, какая будет дата через заданные дату и количество дней от/до этой даты.

from datetime import date, timedelta input_date = input('Date: ') days = input('Amount of days: ') input_date = date.fromisoformat(input_date) delta = timedelta(days=int(days)) new_date = input_date + delta print(new_date)
Date: 2023-07-06 Amount of days: 5 2023-07-11
Date: 2023-07-06 Amount of days: -10 2023-06-26

Источник

Python: Посчитать количество дней между датами

Python: Посчитать количество дней между датами

Из этого руководства вы узнаете, как посчитать количество дней между двумя датами в Python.

Читайте также:  Python print с новой строки

Мы будем использовать стандартную библиотеку datetime , которая позволит нам действительно легко работать с datetime объектами в Python.

Создание объекта Datetime

Поскольку datetime является встроенным модулем, мы можем сразу импортировать его.

from datetime import datetime

Создать объект datetime можно несколькими способами:

date_string = "1 January, 2021" now = datetime.now() # получить текущую дату dt1 = datetime(day=1, month=1, year=2021) # с заданными аргументами dt2 = datetime.strptime(date_string, "%d %B, %Y") # из строки 

Получить количество дней между датами в Python

Попытка посчитать количество дней между датами без использования модуля datetime , очень сложная задача — с учетом високосного года и количеством дней в каждом месяце (попытки создать собственную реализацию просто бессмысленна).

Мы можем просто вычесть datetime друг из друга, чтобы получить количество дней между ними:

from datetime import datetime date1 = datetime.now() date2 = datetime(day=1, month=12, year=2021) timedelta = date2 - date1 print(timedelta) 

Если вам не нужны некоторые из этих показателей, можно конкретно указать, что вы хотите получить в результате: timedelta.days , timedelta.seconds или timedelta.microseconds :

now = datetime.now() new_years = datetime(day=1, month=1, year=2022) countdown = new_years - now print('Сегодня: ', now) print('Новый год наступит: ', new_years) print('До нового года осталось дней: ', countdown.days)

Здесь мы создали timedelta объект countdown , и теперь мы может получить доступ к параметру days , чтобы узнать количество дней между new_years и now .

Сегодня: 2021-09-29 14:43:49.218155 Новый год наступит: 2022-01-01 00:00:00 До нового года осталось дней: 93

Сложение и вычитание дней с помощью TimeDelta

Что, если вместо того, чтобы пытаться вычесть две известные даты друг из друга, вы захотите добавить или вычесть временные рамки? Например, клиент подписался на услугу за ежемесячную плату, и через 30 дней нужно напомнить ему об этом.

Используя timedelta вы можете построить временную рамку для этих 30 дней, и вычитать ее из другого datetime объекта:

from datetime import datetime, timedelta now = datetime.now() thirty_days = timedelta(days=30) print('Через 30 дней: ', now + thirty_days) print('30 дней назад: ', now - thirty_days) 
Через 30 дней: 2021-10-29 14:28:43.208634 30 дней назад: 2021-08-30 14:28:43.208634

Это невероятно полезная функция при попытке реализовать планирование или получение записей из базы данных (например, информацию за последние 30 дней).

Заключение

В этом руководстве мы рассмотрели все, что вам нужно знать о получении количества дней между двумя датами в Python.

Источник

Нахождение длительности временных интервалов в Python

Python-программисту, при работе со значениями, представляющими дату и время, часто нужно вычислять длительность временных интервалов. Из этого материала вы узнаете о том, как находить разницу между двумя временными метками, выраженную в часах, минутах и секундах.

А именно, здесь мы коснёмся следующих вопросов:

  • Как пользоваться Python-модулем datetime для работы с датой и временем.
  • Что собой представляют объекты timedelta и что они могут дать программисту.
  • Как вычислять продолжительность временных интервалов, выражая результат в разных единицах измерения.

Python-модуль datetime

Для работы с датой и временем в Python используется модуль datetime . Он является частью стандартной библиотеки Python. Для того чтобы применить этот модуль в своём проекте — достаточно его импортировать:

Для вычисления продолжительности временного интервала нужно создать две различных отметки времени. Тут есть несколько вариантов:

  • Два объекта date — стандартное представление даты.
  • Два объекта time — стандартное представление времени.
  • Два объекта datetime , комбинирующие сведения, которые обычно хранятся в объектах date и time .

Создание объектов date

Импортируем класс date из модуля datetime . Для того чтобы создать в Python объект date — можно воспользоваться обычной синтаксической конструкцией вида datetime.date(,,) . Вот пример создания объекта date с именем date1 :

from datetime import date date1 = datetime.date(2022,3,27) print(date1) # Вывод: 2022-03-27 

Этот код можно попробовать запустить в онлайн-интерпретаторе Python на Geekflare. Ещё можно установить Python у себя.

Из предыдущего примера видно, что дата выводится в формате YYYY-MM-DD .

Обратите внимание на то, что при создании объекта date месяц надо задавать с использованием целого числа, в начале которого нет дополнительных нулей. Обычно в числовой записи месяцев соответствующие числа дополняют нулями. Здесь же, например, чтобы указать Июнь, то есть — 6 месяц — нужно воспользоваться числом 6, а не 06.

Попробуйте запустить следующий фрагмент кода. Тут месяц намеренно записан неправильно — 03 вместо 3. Из-за этого возникает ошибка SyntaxError :

date1 = datetime.date(2022,03,27) print(date1) # Сообщение об ошибке File "", line 1 date1 = datetime.date(2022,03,27) ^ SyntaxError: invalid token 

Поговорим теперь о том, как создавать объекты time .

Создание объектов time

Для создания объектов time импортируем класс time . При создании таких объектов указывают следующие атрибуты класса: hour , minute , second и microsecond . Они, соответственно, позволяют указывать часы, минуты, секунды и микросекунды.

Правда, все эти атрибуты являются необязательными. Если какой-то из них опустить, предположим — second , то он, по умолчанию, будет установлен в 0.

В следующем примере показано создание объекта time с именем time1 . Так же, как и при работе с объектами date , объекты time можно выводить в консоль:

from datetime import time time1 = datetime.time(13,27,45,4600) print(time1) # Вывод: 13:27:45.004600 

Создание объектов datetime

Как видите, объекты типа date не содержат сведений о времени. А в объектах time нет информации о дате.

Но на практике обычно нужны данные и о дате, и о времени. Поэтому вместо двух вышеописанных классов рекомендуется прибегнуть к классу datetime .

Обратиться к этому классу и создать соответствующий объект ( dt1 ) можно так:

dt1 = datetime.datetime(2022,3,27,13,27,45,46000) print(dt1) # Вывод: 2022-03-27 13:27:45.046000 

Создадим ещё один объект datetime и дадим ему имя dt2 , опустив при его создании атрибут second . Это приведёт к тому, что он будет установлен в значение по умолчанию — 0.

dt2 = datetime.datetime(2022,6,30,14,28) print(dt2) # Вывод: 2022-06-30 14:28:00 

Итак, теперь вы знаете о том, как создавать Python-объекты date , time и datetime , представляющие отметки времени. Пришло время поговорить о том, как находить длительность временных интервалов.

Применение объектов timedelta

В Python объекты timedelta представляют собой сведения о промежутках времени. Это — разница двух объектов date , time или datetime .

Если сложить или вычесть два объекта date , time или datetime , получится объект timedelta . У этого объекта имеются полезные атрибуты и методы, которые могут помочь в деле нахождения длительности временных интервалов.

Посчитаем длительность интервала, задаваемого двумя объектами типа datetime — dt1 и dt2 :

dt1 = datetime.datetime(2022,3,27,13,27,45,46000) dt2 = datetime.datetime(2022,6,30,14,28) tdelta = dt2 - dt1 print(tdelta) print(type(tdelta)) # Вывод 95 days, 1:00:14.954000

Видно, что переменная tdelta хранит разницу между dt1 и dt2 . Тут, кроме того, пользуясь встроенной Python-функцией type() , мы проверили тип tdelta . Это — timedelta .

Проведём ещё один эксперимент.

Нахождение временного промежутка между двумя датами

Рассмотрим простой, но интересный пример.

Задача заключается в том, чтобы получить временную разницу между текущей датой (сегодняшним днём) и днём вашего рождения.

Для того чтобы её решить — надо сформировать первую отметку времени, указывающую на сегодняшний день, и вторую, указывающую на дату дня рождения.

Создадим пару объектов datetime :

  • Первый будет хранить сегодняшнюю дату, мы назовём его today .
  • Второй будет хранить дату дня рождения. Назовём его bday .
today = datetime.datetime.now() print(today) # Пример вывода: 2022-01-22 09:10:18.489538 

Пробуя следующий код, замените значение, попадающее в bday , на дату своего дня рождения текущего года. Это позволит узнать о том, сколько времени вам ещё его ждать в этом году.

Если же ваш день рождения в этом году уже прошёл, можете записать в bday дату из следующего года.

bday = datetime.datetime(2022,8,30,11,59) print(bday) # Пример вывода: 2022-08-30 11:59:00 

Следующий шаг нашей работы — нахождение разницы между двумя отметками времени. Её мы будем хранить в переменной time_diff . Подобные переменные, как мы уже говорили, имеют тип timedelta . Нам достаточно вычесть today из bday .

time_diff = bday - today print(f"Your birthday is in ") # Вывод Your birthday is in 220 days, 2:46:00.127416 

Для того чтобы узнать о том, сколько полных дней осталось до дня рождения, можно воспользоваться атрибутом days объекта типа timedelta .

tdays = time_diff.days print(f"Your birthday is in days.") # Вывод Your birthday is in 220 days. 

Выражение длительности временных промежутков в секундах

Теперь узнаем о том, сколько ждать дня рождения, выразив результат в секундах.

Для этого можно воспользоваться методом total_seconds() объекта типа timedelta . В следующем примере это — всё тот же объект time_diff .

tsecs = time_diff.total_seconds() print(f"Your birthday is seconds away.") # Вывод Your birthday is 19017960.127416 seconds away. 

Да, дня рождения придётся подождать!

Теперь вы знаете о том, как вычислять промежутки времени и выражать их в секундах.

Давайте вспомним то, что мы знаем о времени, и поговорим об измерении времени в днях, часах, минутах и секундах. В сутках 24 часа, в часе 60 минут, а 60 секунд — это минута.

Часы, минуты и секунды

Для перехода от секунд к минутам, дням или часам, можно воспользоваться следующей таблицей, деля значение в секундах на соответствующий коэффициент преобразования.

Из В Делим на
Секунд Минуты 60
Секунд Часы 60*60
Секунд Дни 60*60*24

Воспользуемся этими знаниями.

Выражение длительности временных промежутков в минутах

Для того чтобы, имея данные о длительности промежутка времени, выраженные в секундах, узнать его длительность в минутах, нужно разделить общее число секунд на 60.

Разделим то, что хранится в переменной tsecs , на 60, и сохраним то, что получится, в переменной tmins :

tmins = tsecs/60 print(f"Your birthday is minutes away.") # Вывод Your birthday is 316966.0021236 minutes away. 

Выражение длительности временных промежутков в часах

Теперь посчитаем длительность временного промежутка, выраженную в часах. Учитывая то, что у нас уже есть значение, выраженное в минутах, для достижения этой цели его можно просто поделить на 60. Или можно поделить значение, выраженное в секундах, на 3600 (60*60).

thrs = tsecs/(60*60) print(f"Your birthday is hours away.") # Вывод Your birthday is 5282.76670206 hours away. 

Теперь вы знаете о том, как представлять разные промежутки времени в нужном вам виде.

Итоги

Освоив это руководство, вы узнали следующее:

  • Как создавать объекты, содержащие сведения о дате и времени, пользуясь модулем datetime , и как работать с такими объектами.
  • Как пользоваться объектами типа timedelta для нахождения длительности временных промежутков или разницы между двумя объектами, содержащими сведения о дате или времени.
  • Как выражать длительность временных промежутков в секундах, минутах и часах.

Какие задачи вы решаете с помощью Python?

Источник

Оцените статью