Python datetime как прибавить дни
Перейти к содержимому

Python datetime как прибавить дни

  • автор:

Как прибавить число к дате?

Предлагаю распарсить дату и прибавить к ней timedelta .

Пример:

from datetime import datetime, timedelta a = '2020-12-12' dt = datetime.strptime(a, '%Y-%m-%d') result = dt + timedelta(days=1) print(result.strftime('%Y-%m-%d')) 

stdout:

2020-12-13 

Отслеживать
ответ дан 17 авг 2020 в 11:34
18.5k 5 5 золотых знаков 24 24 серебряных знака 48 48 бронзовых знаков
А можно без каста в конце работать только с датой без времени?
17 авг 2020 в 11:38
@dIm0n, совсем без каста наверное нельзя, но можно так: print(result.date())
17 авг 2020 в 11:42
можно так: dt = datetime.strptime(a, ‘%Y-%m-%d’).date() , а дальше работаем с датой.
17 авг 2020 в 11:44
@MaxU вот так лучше всего, как по мне
17 авг 2020 в 11:46

import datetime date = datetime.datetime.strptime('2020-12-12', "%Y-%m-%d") res = date + datetime.timedelta(days=1) print(res.date()) # 2020-12-13 

Отслеживать
ответ дан 17 авг 2020 в 11:35
13.1k 2 2 золотых знака 21 21 серебряный знак 37 37 бронзовых знаков

a = '2020-12-12' print(a[:-1] + str(int(a[-1]) + 1)) 

Python datetime как прибавить дни

Для форматирования объектов 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))

Примеры работы с модулем datetime в Python

Задача: имеем объект datetime , необходимо его преобразовать в секунды ( timestamp ).

>>> import datetime # Для преобразования получим объект `datetime`, # содержащий дату и время в настоящий момент >>> dt = datetime.datetime.now() >>> dt # datetime.datetime(2020, 5, 6, 13, 52, 5, 208688) # теперь получаем из `datetime` секунды - `timestamp` >>> second = dt.timestamp() >>> second # 1588762325.208688 # можно быстрее, одной строкой >>> second = datetime.datetime.now().timestamp() # 1588762325.208688 # если не нужны доли секунд, то # преобразуем в тип int >>> int(second) # 1588762325 

Преобразуем время в секундах ( timestamp ) в объект datetime :

Задача: имеем время в секундах, необходимо из секунд получить объект datetime , что бы потом что-то сделать.

>>> import datetime # имеем время в секундах second = 1588762325 # преобразовываем секунды в объект 'datetime' # его же методом '.timestamp()' >>> dt = datetime.datetime.fromtimestamp(second) >>> dt # datetime.datetime(2020, 5, 6, 13, 52, 5) # дальше работаем как с объектом # получаем строку >>> dt.strfptint('%d.%m.%Y %H:%M') # '06.05.2020 13:52' # через сколько новый год >>> future_dt = datetime.datetime.strptime('01.01.2021', '%d.%m.%Y') >>> delta = future_dt - dt # через дней >>> delta.days # 239 # секунд >>> delta.seconds # 36475 # месяцев >>> 239 // 30 # 7 

Получить объект datetime из отдельных объектов date и time :

>>> import datetime # дата >>> date = datetime.date.today() # время >>> time = datetime.time(23, 55) # интервал >>> delta = datetime.timedelta(minutes=30) # соединяем все вместе >>> datetime.datetime.combine(date, time) + delta # datetime.datetime(2020, 5, 6, 0, 25) 

Форматирование вывода строки c датой и временем:

>>> import datetime >>> dt = datetime.datetime.now() >>> dt.strftime('%H:%M - %m.%d.%Y года') # '09:56 - 05.06.2020 года' >>> dt.strftime('%H часов %M минут %m.%d.%Y года') # '09 часов 56 минут 05.06.2020 года' >>> dt.strftime('%m/%d/%y') # '05/06/20' >>> dt.strftime('%Y-%m-%d') # '2020-05-06' # форматирование даты при помощи функции format() >>> 'День: %d>, Месяц: , время: .'.format(dt) # 'День: 06, Месяц: May, время: 09:56.' # форматирование даты при помощи f-строк f'День: dt:%d>, Месяц: dt:%B>, время: dt:%H:%M>' # 'День: 06, Месяц: May, время: 09:56.' 

Преобразование строки с датой и временем в объект datetime.datetime() :

>>> import datetime >>> date_str = 'Fri, 24 Apr 2021 16:22:54 +0000' >>> format = '%a, %d %b %Y %H:%M:%S +0000' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2021, 4, 24, 16, 22, 54) >>> date_str = '24.12.2020 16:22' >>> format = '%d.%m.%Y %H:%M' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2020, 12, 24, 16, 22) 

Сложение и вычитание даты и времени:

При вычитании дат получается объект продолжительности — datetime.timedelta()

Подсчет дней до события.

>>> import datetime >>> today = datetime.datetime.now() >>> date = datetime.datetime(2020, 12, 6) >>> delta = date - today >>> delta.days # 213 

Подсчет дней прошедших с события.

>>> import datetime >>> date = datetime.datetime(2019, 12, 31) >>> today = datetime.datetime.now() >>> delta = today - date >>> delta.days # 127 

Узнать дату и время предстоящего или прошедшего события.

>>> import datetime >>> today = datetime.datetime.now() # узнаем, какая дата будет через 3 недели и 5 дней >>> delta = datetime.timedelta(weeks=3, days=5) >>> date = today + delta >>> date.day, date.month, date.year # (1, 6, 2020) # узнаем, какая дата была 100 дней назад >>> delta = datetime.timedelta(days=100) >>> date = today - delta >>> date.day, date.month, date.year # (27, 1, 2020) # узнаем, сколько время будет через 1 час 30 минут и 45 секунд >>> delta = datetime.timedelta(hours=1, minutes=30, seconds=45) >>> date = today + delta >>> date.hour, date.minute, date.second # (16, 18, 15) 

Сравнение объектов datetime.datetime() :

  • datetime1 считается меньше datetime2, когда datetime1 предшествует datetime2 во времени
  • При сравнении datetime1 c параметром tz не равным None с datetime2 , у которого параметром tz=None вызывается TypeError .
  • При сравнений на равенство datetime1 c параметром tz не равным None никогда не будут равен datetime2 , у которого параметром tz=None .
>>> import datetime >>> today = datetime.datetime.now() >>> delta = datetime.timedelta(weeks=3, days=1) >>> date = today - delta >>> date  today # True >>> date = today + delta >>> date  today # False >>> date > today # True # Сравнение с заранее заданной датой >>> today = datetime.datetime.now() >>> date = datetime.datetime(2020, 5, 6) >>> date.date() == today.date() # True 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Класс timedelta() модуля datetime
  • Примеры использования datetime.timedelta()
  • Класс date() модуля datetime
  • Методы экземпляра datetime.date()
  • Примеры использования datetime.date()
  • Класс datetime() модуля datetime
  • Методы экземпляра datetime.datetime()
  • Примеры работы с модулем datetime
  • Класс time() модуля datetime
  • Класс tzinfo() модуля datetime
  • Класс timezone() модуля datetime
  • Правила форматирования strftime() и strptime() модуля datetime

Получение дня недели по дате в Python

Баннер

В программах на Python часто возникает задача определения дня недели по заданной дате. Например, необходимо узнать, какой день недели соответствует 20 октября 2017 года.

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

import datetime # Создание объекта datetime date = datetime.datetime(2017, 10, 20) # Вывод дня недели print(date.weekday())

В этом примере сначала импортируется модуль datetime , затем создается объект datetime с помощью функции datetime() , которой в качестве аргументов передаются год, месяц и день. Далее вызывается метод weekday() , который возвращает номер дня недели для данной даты.

Стоит отметить, что метод weekday() возвращает дни недели, начиная с 0, где 0 — это понедельник, 1 — вторник, и так далее до 6 — воскресенье. Таким образом, в примере выше будет выведено число 4 , что соответствует пятнице.

Если нужно, чтобы неделя начиналась с воскресенья (то есть воскресенье было бы днем номер 1, понедельник — днем номер 2 и т.д.), можно использовать метод isoweekday() . Вот пример:

import datetime # Создание объекта datetime date = datetime.datetime(2017, 10, 20) # Вывод дня недели print(date.isoweekday())

В этом случае в ответе будет число 5 , что также соответствует пятнице.

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

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