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))
Как прибавить число к дате?
Предлагаю распарсить дату и прибавить к ней 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.4k 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 как прибавить дни
Запись: and-semakin/mytetra_data/master/base/1525418663rd3ocoslig/text.html на raw.githubusercontent.com
Чтобы производить периодические (календарные) арифметические операции над датами в Python, можно использовать класс dateutil.relativedelta .
pip install python-dateutil
from datetime import date
from dateutil.relativedelta import relativedelta # $ pip install python-dateutil
print(date(1920, 1, 10) + relativedelta(years=+100))
- Закодировать файл в 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)
Модуль datetime
Модуль datetime предоставляет классы для обработки времени и даты разными способами. Поддерживается и стандартный способ представления времени, однако больший упор сделан на простоту манипулирования датой, временем и их частями. Классы, предоставляемые модулем datetime :
datetime.date(year, month, day) ¶
стандартная дата. Атрибуты: year, month, day. Неизменяемый объект.
import datetimed = datetime.date(2012, 12, 14) print(d.year) # 2012print(d.day) # 14print(d.month) # 12
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None) ¶
содержит всю информацию объектов datetime.date плюс datetime.time .
import datetime a = datetime.datetime(2017, 3, 5)print(a) # datetime.datetime(2017, 3, 5, 0, 0) b = datetime.datetime(2017, 3, 5, 12, 30, 10)print(b) # datetime.datetime(2017, 3, 5, 12, 30, 10) d = datetime.datetime(2017, 3, 5, 12, 30, 10)print(d.year) # 2017print(d.second) # 10print(d.hour) # 12
datetime.datetime принимает несколько дополнительных аргументов: год, месяц, день, час, минута и секунда. Это также позволяет вам указывать информацию о микросекундах и часовом поясе.
datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) ¶
стандартное время, не зависит от даты. Атрибуты: hour, minute, second, microsecond, tzinfo.
datetime.timedelta ¶
описывает определенный период во времени, который находится между двумя различными моментами
| Атрибут | Значение |
|---|---|
| days | Между −999999999 and 999999999 включительно |
| seconds | Между 0 и 86399 включительно |
| microseconds | Между 0 и 999999 включительно |
Поддерживаемые операции
| Операция | Результат |
|---|---|
| t1 = t2 + t3 | Суммирует дельту между датами |
| t1 = t2 — t3 | Разница дельт между датами |
| t1 = t2 * i or t1 = i * t2 | Умножение дельты на целое число |
| t1 = t2 * f or t1 = f * t2 | Дельта умножается на число с плавающей точкой |
| f = t2 / t3 | Деление общей длительности t2 на интервал t3. Возвращает объект с плавающей точкой |
| t1 = t2 / f or t1 = t2 / i | Дельта делится на число с плавающей точкой или целое |
| t1 = t2% t3 | Остаток часть вычисляется как объект timedelta |
| q, r = divmod(t1, t2) | Вычисляет частное и остаток: q = t1 // t2 (3) и r = t1% t2. q — целое число, а r — объект deltatime |
| +t1 | Возвращает объект timedelta с полностью идентичным значением t1 |
| —t1 | возвращает объект timedelta с полностью противоположным значением t1 |
| abs(t) | возвращает объект timedelta с положительным значением всех свойств t |
| str(t) | возвращает строковое представление объекта a в формате, заданном по умолчанию |
| repr(t) | возвращает строковое представление объекта a в формате с отрицательными значениями |
timedelta.total_seconds() ¶
Возвращает общее количество секунд, содержащихся в продолжительности. Эквивалентно (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10 * 6)/10 * 6 рассчитано с включенным истинным делением. Пример:
>>> from datetime import timedelta>>> year = timedelta(days=365)>>> another_year = timedelta(weeks=40, days=84, hours=23,. minutes=50, seconds=600) # adds up to 365 days>>> year.total_seconds()31536000.0>>> year == another_yearTrue>>> ten_years = 10 * year>>> ten_years, ten_years.days // 365(datetime.timedelta(days=3650), 10)>>> nine_years = ten_years - year>>> nine_years, nine_years.days // 365(datetime.timedelta(days=3285), 9)>>> three_years = nine_years // 3>>> three_years, three_years.days // 365(datetime.timedelta(days=1095), 3)>>> abs(three_years - ten_years) == 2 * three_years + yearTrue
datetime.tzinfo ¶
абстрактный базовый класс для информации о временной зоне (например, для учета часового пояса и/или летнего времени).
Методы класса datetime :
datetime.combine(date, time) ¶
объект datetime из комбинации объектов date и time .
datetime.fromtimestamp(timestamp) ¶
дата из стандартного представления времени.
datetime.fromordinal(ordinal) ¶
дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.
datetime.now(tz=None) ¶
объект datetime из текущей даты и времени.
datetime.today() ¶
объект datetime из текущей даты и времени. Работает также, как и datetime.now() со значением tz=None .
datetime.strptime(date_string, format) ¶
преобразует строку в datetime по формату
| Формат | Значение |
|---|---|
| %a | Сокращенное название дня недели |
| %A | Полное название дня недели |
| %b | Сокращенное название месяца |
| %B | Полное название месяца |
| %c | Дата и время |
| %d | День месяца 01,31 |
| %H | Час (24-часовой формат) 00,23 |
| %I | Час (12-часовой формат) 01,12 |
| %j | День года 001,366 |
| %m | Номер месяца 01,12 |
| %M | Число минут 00,59 |
| %p | До полудня или после (при 12-часовом формате) |
| %S | Число секунд 00,61 |
| %U | Номер недели в году (нулевая неделя начинается с воскресенья) 00,53 |
| %w | Номер дня недели 0(Sunday), 6 |
| %W | Номер недели в году (нулевая неделя начинается с понедельника) 00,53 |
| %x | Дата |
| %X | Время |
| %y | Год без века 00,99 |
| %Y | Год с веком |
| %Z | Временная зона |
| %% | Знак ‘%’ |
datetime.strftime(format) ¶
преобразует datetime в строку по формату
| Формат | Значение |
|---|---|
| %a | Сокращенное название дня недели |
| %A | Полное название дня недели |
| %b | Сокращенное название месяца |
| %B | Полное название месяца |
| %c | Дата и время |
| %d | День месяца 01,31 |
| %H | Час (24-часовой формат) 00,23 |
| %I | Час (12-часовой формат) 01,12 |
| %j | День года 001,366 |
| %m | Номер месяца 01,12 |
| %M | Число минут 00,59 |
| %p | До полудня или после (при 12-часовом формате) |
| %S | Число секунд 00,61 |
| %U | Номер недели в году (нулевая неделя начинается с воскресенья) 00,53 |
| %w | Номер дня недели 0(Sunday), 6 |
| %W | Номер недели в году (нулевая неделя начинается с понедельника) 00,53 |
| %x | Дата |
| %X | Время |
| %y | Год без века 00,99 |
| %Y | Год с веком |
| %Z | Временная зона |
| %% | Знак ‘%’ |
datetime.date() ¶
объект даты (с отсечением времени).
datetime.isoweekday() ¶
день недели в виде числа, понедельник — 1, воскресенье — 7.
datetime.isocalendar() ¶
кортеж (год в формате ISO, ISO номер недели, ISO день недели).
datetime.isoformat(sep=’T’) ¶
красивая строка вида «YYYY-MM-DDTHH: MM: SS.mmmmmm» или, если microsecond == 0, «YYYY-MM-DDTHH: MM: SS»
datetime.replace ([year[, month[, day[, hour , minute , second , microsecond , tzinfo ]]]]) ¶
возвращает новый объект datetime с изменёнными атрибутами.
datetime.time() ¶
объект времени (с отсечением даты).
datetime.timetuple() ¶
возвращает struct_time из datetime .
datetime.timestamp() ¶
возвращает время в секундах с начала эпохи.
datetime.toordinal() ¶
количество дней, прошедших с 01.01.1970.
datetime.weekday() ¶
день недели в виде числа, понедельник — 0, воскресенье — 6.
Поддерживаемые операции:
| Операция | Результат |
|---|---|
| datetime2 = datetime1 + timedelta | Прибавляет к дате указанный период |
| datetime2 = datetime1 — timedelta | Вычитает из даты указанный период |
| timedelta = datetime1 — datetime2 | Возвращает разницу между двумя датами |
| datetime1 < datetime2 | Сравнивает дату и время (3) |