Отнять день от даты python

Отрезок времени в Python – timedelta

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

Удобно работать с datetime и timedelta путем математических операций.

📎 Примеры. Добавить к дате один день, год или отнять 2:20 (функция str тут для человекочитаемого формата):

>>> str(datetime.now() + timedelta(days=1)) '2019-10-06 15:51:09.089691' >>> str(datetime.now() + timedelta(days=365)) '2020-10-04 15:52:04.618896' >>> str(datetime.now() - timedelta(hours=2, minutes=20)) '2019-10-05 13:41:27.617589'

Разница во времени между событиями:

>>> a = datetime.now() >>> b = datetime.now() + timedelta(minutes=5) >>> b - a datetime.timedelta(0, 317, 99915) >>> str(b - a) '0:05:17.099915'

timedelta внутренне хранит только секунды от начала дня и сами дни, хотя в конструкторе принимает дни, секунды, микросекунды, миллисекунды, минуты, часы и недели (можно выбрать любые их сочетания для задания интервала):

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) >>> str(timedelta(days=1, hours=2, milliseconds=333)) '1 day, 2:00:00.333000'

Причем мы не обязаны нормализовывать аргументы: он сам поймет, что 200 минут – это 3 часа 20 минут:

>>> str(timedelta(minutes=200)) '3:20:00'

Достать часы и минуты (странно, что у объекта нет свойств hours и minutes):

def hours_minutes(td): return td.seconds // 3600, (td.seconds // 60) % 60 >>> hours_minutes(timedelta(0, 12345)) (3, 25)

Сколько всего секунд в интервале:

>>> timedelta(minutes=200, seconds=21, hours=25).total_seconds() 102021.0

Можно даже умножать timedelta на числа или поделить два timedelta или взять остаток. Допустим рабочая смена длится 7 часов 30 минут, сколько полных смен в 3-х сутках?

>>> a = timedelta(days=3) >>> b = timedelta(hours=7, minutes=30) >>> a // b 9 >>> str(a % b) '4:30:00'

Ответ 9 полных смен и еще останется 4 часа 30 минут лишних.

Бонус. Формат даты по-нашенскому (ДД.ММ.ГГГГ):

>>> datetime.strftime(datetime.now(), '%d.%m.%Y') '05.10.2019'

🐉 Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈

Источник

Отнять день от даты python

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

Источник

Как выполнить арифметические операции с датами на Python?

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

Объект timedelta представляет продолжительность, разницу между двумя датами или временем. Конструктор timedelta имеет следующую сигнатуру функции:

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

Примечание. Все аргументы являются необязательными и по умолчанию равны 0. Аргументы могут быть целыми, длинными или плавающими и могут быть положительными или отрицательными. Вы можете прочитать больше об этом здесь: https://docs.python.org/2/library/datetime.html#timedelta-objects

Пример

Пример использования объектов timedelta и дат:

import datetime old_time = datetime.datetime.now() print(old_time) new_time = old_time - datetime.timedelta(hours=2, minutes=10) print(new_time)

Вывод

2018-01-04 11:09:00.694602 2018-01-04 08:59:00.694602

арифметика timedelta() не поддерживается для объектов datetime.time(); если вам нужно использовать смещения из существующего объекта datetime.time(), просто используйте datetime.datetime.combine(), чтобы сформировать экземпляр datetime.datetime(), выполнить вычисления и снова «извлечь» время с помощью .time() метод.

Вычитание 2 объектов datetime дает объект timedelta. Этот объект timedelta можно использовать для нахождения точной разницы между двумя датами.

Пример

t1 = datetime.datetime.now() t2 = datetime.datetime.now() print(t1 - t2) print(type(t1 - t2))

Источник

Читайте также:  Php check if english
Оцените статью