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

Введение В этом руководстве мы рассмотрим, как получить количество дней между двумя датами в Python. Мы будем использовать встроенный пакет datetime, который позволяет вам действительно легко работать с объектами datetime в Python. Создание объекта Datetime Поскольку datetime является встроенным модулем, вы можете сразу получить к нему доступ, импортировав его в начало файла Python. Вы можете создавать объекты datetime несколькими способами: из datetime import datetime date_string = "1 January, 2021" now

Вступление

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

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

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

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

Вы можете создавать datetime несколькими способами:

 from datetime import datetime 
 
 date_string = "1 January, 2021" 
 
 now = datetime.now() # Create Datetime based on system clock 
 dt1 = datetime(day=1, month=1, year=2021) # Create Datetime with given arguments 
 dt2 = datetime.strptime(date_string, "%d %B, %Y") # Create Datetime from String 

При преобразовании строк в Datetime в Python необходимо соблюдать определенные правила.

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

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

Однако с datetime это становится тривиальным.

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

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

Это возвращает timedelta , который содержит days , seconds и microseconds и представляет собой промежуток времени между любыми двумя объектами date / time или datetime

Печать этого объекта вернет этому событию дни, часы, минуты, секунды и микросекунды:

 149 days, 5:22:52.255124 

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

 now = datetime.now() 
 new_years = datetime(day=1, month=1, year=2022) 
 countdown = new_years - now 
 
 print('Today is: ', now) 
 print('New Year is on: ', new_years) 
 print('Days until New Years: ', countdown.days) 

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

Затем мы можем просто получить доступ к days этого объекта, чтобы узнать количество дней между ними. Это приводит к:

 Today is: 2021-02-01 18:35:12.272524 
 New Year is on: 2022-01-01 00:00:00 
 Days until New Years: 333 

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

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

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

 from datetime import datetime, timedelta 
 
 now = datetime.now() 
 thirty_days = timedelta(days=30) 
 
 print('In 30 days: ', now + thirty_days) 
 print('30 days ago: ', now - thirty_days) 

Это приводит к:

 In 30 days: 2021-03-03 18:41:49.922082 
 30 days ago: 2021-01-02 18:41:49.922082 

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

Заключение

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

Мы работали с объектами datetime timedelta для достижения этой функциональности.

comments powered by Disqus