Перейти к содержимому

Как прибавить к дате один день python

  • автор:

Как прибавить к дате один день 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

Запись: 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)

Класс date модуля datetime. Работа с датами в Python

Экземпляры, создаваемые от класса date модуля datetime , входящего в стандартную библиотеку языка Python, предназначены для хранения исключительно дат (без времени).

Чтобы создать объект даты непосредственно от date , надо в конструктор класса передать три целочисленных значения – год, месяц и день.

from datetime import date d1 = date(2023, 3, 18) d2 = date(day=10, month=9, year=2022) print(type(d1)) print(d1) print(d2)
 2023-03-18 2022-09-10

Тот факт, что даты были выведены в формате YYYY-MM-YY (стандарт ISO 8601), связан с тем, что при вызове функции print языка Python сначала вызывается метод __str__ объекта, который передается в print . В случае date метод __str__ возвращает год, месяц, день экземпляра-даты в виде соответствующей строки.

Если же мы в самом интерпретаторе обратимся к объекту или передадим его в функцию repr , то увидим строку, отражающую его представление как объекта класса date .

Создание экземпляра date и вывод его на экран

У экземпляров date есть свойства year , month , day . Значениями года могут быть целые числа от 1 до 9999. Эти минимально и максимально допустимые года содержатся в константах MAXYEAR и MINYEAR модуля datetime . Месяц и день создаваемой даты также должны находиться в допустимых диапазонах.

Свойства даты (экземпляра date)

С помощью методов weekday и isoweekday можно узнать номер дня недели даты. Разница между методами заключается в старте нумерации с 0 или 1.

from datetime import date d = date(2023, 3, 15) if d.isoweekday() == 7: print("Выходной") else: print("Рабочий")

Объекты date являются неизменяемыми. Другими словами, мы не можем перезаписать значение свойства, например, перейти к следующему дню. Зато у экземпляров есть метод replace , возвращающий новую дату, в которой заменены значения свойств, если соответствующие аргументы передаются, или возвращается другой экземпляр с теми же данными.

from datetime import date d = date(2023, 5, 6) print(d.replace(year=2024)) # 2024-05-06 # дата не изменилась print(d) # 2023-05-06 # переменная связывается с новым объектом date d = d.replace(day=d.day+1) print(d) # 2023-05-07

Для получения сегодняшней даты используется классовый метод today .

Получение даты текущего (сегодняшнего) дня с помощью метода today

Метод fromisoformat класса возвращает экземпляр даты, соответствующий переданной в него строке, представляющей собой дату в ISO-формате. Метод удобно использовать, когда дата, например, вводится пользователем или считывается из файла.

from datetime import date s = input('Введите дату в формате YYYY-MM-DD: ') try: d = date.fromisoformat(s) print('Год:', d.year) print('Месяц:', d.month) print('День:', d.day) print(f'Это -й день недели') except ValueError as e: print(e)
Введите дату в формате YYYY-MM-DD: 2024, 1, 1 Invalid isoformat string: '2024, 1, 1'
Введите дату в формате YYYY-MM-DD: 2023-06-28 Год: 2023 Месяц: 6 День: 28 Это 3-й день недели
Введите дату в формате YYYY-MM-DD: 2021-09-32 day is out of range for month

Если недостаточно вывода в формате ISO, который обеспечивает __str__ и заменяющий его метод isoformat , то более широкие возможности дает strftime . Здесь форматом вывода управляют с помощью определенных кодов.

from datetime import date d = date(2023, 5, 7) print('1:', d) print('2:', d.isoformat()) print('3:', d.strftime("%d-%m-%y")) print('4:', d.strftime("%d %B %Y, %A"))
1: 2023-05-07 2: 2023-05-07 3: 07-05-23 4: 07 May 2023, Sunday

Все коды форматов можно посмотреть в официальной документации.

Даты можно сравнивать между собой и вычислять количество дней между ними.

from datetime import date deadline = date(2023, 5, 31) today = date.today() if today  deadline: diff = deadline - today print("Осталось дней:", diff.days) elif today > deadline: diff = today - deadline print("Вы задержали на дней:", diff.days) else: print("Сегодня крайний срок")

Когда из одной даты вычитается другая, возвращается экземпляр типа timedelta , свойство days которого содержит количество дней. Подробно этот класс рассмотрим позже.

В свою очередь к дате можно как прибавлять объект timedelta , так и вычитать. Результатом таких операций является другой экземпляр даты, отстоящий от даты-операнда в будущее или прошлое на количество дней таймдельты.

from datetime import date, timedelta date1 = date.fromisoformat(input("Введите дату YYYY-MM-DD: ")) days = timedelta(int(input("Сколько дней от нее: "))) print("Ваша дата:", date1 + days)
Введите дату YYYY-MM-DD: 2023-08-09 Сколько дней от нее: 2 Ваша дата: 2023-08-11
Введите дату YYYY-MM-DD: 2024-05-10 Сколько дней от нее: -18 Ваша дата: 2024-04-22

Атрибуты класса date (подчеркнуты не упомянутые в уроке):

  • данные, хранимые в классе (свойства класса): min , max , resolution
  • методы класса: today , fromisoformat , fromtimestamp , fromordinal , fromisocalendar
  • свойства экземпляра: day , month , year
  • методы экземпляра: replace , weekday , isoweekday , isoformat , strftime , ctime , isocalendar , timetuple , toordinal

X Скрыть Наверх

Даты и время в Python. Курс

Модуль datetime в Python: как работать с датой и временем

Информация о дате в Python — это не отдельный тип данных. Поэтому для выполнения операций с датой и временем используется модуль datetime . Вначале нужно его импортировать — это даст возможность работать с датами как с объектами отдельного типа.

Курс Python.

Цю мову програмування використовують від базових концепцій до складних застосувань у сферах штучного інтелекту. Після проходження курсу гарантовано отримай роботу в ІТ.

Как вывести подробную текущую дату

import datetime #Импорт модуля vremya = datetime.datetime.now() #Вызов метода now из класса datetime print(vremya) #Вывод времени на экран

Этот код отображает сведения о текущем времени и выводит на экран подробную дату вплоть до микросекунд:

Создание конкретной даты

Для создания конкретной даты используется класс datetime() одноименного модуля . Класс datetime() определяется тремя аргументами для создания даты: год, месяц, день. Давайте посмотрим, как это выглядит в коде:

import datetime #Импорт модуля x = datetime.datetime(2020, 5, 17) #Задание даты print(x) #Вывод даты на экран

Освоить язык программирования Python вам могут помочь онлайн курсы от наших партнеров Mate Academy и Powercode. Получите качественный уровень знаний от практикующих специалистов.

Функция strftime()

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

Курс Финансовый директор.
Отримайте комплексне розуміння фінансової діяльності. Час підніматись по карʼєрним сходам.

Как вывести на экран год и день недели с помощью strftime()

import datetime #Импорт модуля x = datetime.datetime.now() #Вызов метода now из класса datetime print(x.year) #Вывод на экран значения текущего года print(x.strftime("%A")) #Отображение на экране значения текущего дня недели
Параметр метода strftime() Описание Пример
%a День недели сокращенно Wed
%A День недели Wednesday
%w Номер дня недели, начиная с Sunday — 0, Monday — 1… 3
%d День месяца 15
%b Название месяца

Актуальная дата

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

>>> from datetime import date >>> cur = date.today() >>> print(cur)

В консоли отобразится следующий формат даты:

Актуальное время

Для получения текущего времени нужно вернуть данные про актуальную дату и время, после чего извлечь информацию про время с помощью метода time :

>>> import datetime >>> current_date_time = datetime.datetime.now() >>> current_time = current_date_time.time() >>> print(current_time)

С помощью атрибутов модуля datetime можно получать разные версии отображения времени. Применим функцию dir() и укажем нужный атрибут:

>>> import datetime >>> attr = dir(datetime) >>> print(attr) ['MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']

Если есть необходимость работать со временем как с объектом, применим класс time модуля datetime . Структура класса описывается следующим образом: datetime.time(hour, minutes, seconds) .

import datetime #Импорт модуля datetime timeobj = datetime.time(11,28,45) #Генерируется объект time с параметрами 11 часов 28 минут 45 секунд print(timeobj) # Вывод времени на экран

Создать новую дату

Чтобы создать новую дату, воспользуемся синтаксисом datetime.datetime(year,month,day) :

import datetime # Импорт модуля datetime date_obj = datetime.datetime(2021,11,27) # Создается экземпляр класса даты print(date_obj) # Вывод даты на экран

Определить временной промежуток

Для определения временного промежутка используется атрибут timedelta() . Объект timedelta выглядит вот так:

Курс Англійської.
Онлайн-навчання англійської за методикою Кембриджу — вибір понад мільярда людей.

td_object =timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) td_object datetime.timedelta(0)

Расстояние между датами

Используемые нами аргументы опциональны, по умолчанию они приравниваются нулю. Это целые числа или числа с плавающей запятой. Они могут быть с плюсом или минусом, благодаря чему можно вычислять временной промежуток между двумя значениями:

>>> from datetime import date >>> f = date(2021,11,13) >>> s = date(2020,10,11) >>> delta = f - s >>> print(delta)

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

>>> import datetime >>> now = datetime.datetime.now() >>> now datetime.datetime(2021, 9, 27, 13, 39, 25, 771446) >>> from datetime import timedelta >>> now + timedelta(days=3) datetime.datetime(2021, 9, 30, 13, 39, 25, 771446) >>> now +timedelta(days=-3) datetime.datetime(2021, 9, 24, 13, 39, 25, 771446)

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

>>> import datetime >>> now=datetime.datetime.now() >>> now datetime.datetime(2021, 9, 27, 13, 59, 22, 649538) >>> from datetime import timedelta >>> now+timedelta(minutes=3) datetime.datetime(2021, 9, 27, 14, 2, 22, 649538) >>> now+timedelta(minutes=-3) datetime.datetime(2021, 9, 27, 13, 56, 22, 649538)

Сравнение дат

Также можно сравнить даты. Например:

>>>import datetime >>>now = datetime.time(7, 30, 0) >>>next_hour = datetime.time(10, 30, 0) >>>print('now < next_hour:', now < next_hour) >>>today = datetime.date.today() >>>next_week = datetime.date.today() + datetime.timedelta(days=7) >>>print('today > next_week:', today > next_week)
now < next_hour: True today >next_week: False

Операции с часовыми поясами

В Python cуществует два типа данных, содержащих информацию о времени: абсолютные ( naive ) и относительные ( aware ).

Они отличаются тем, что в случае с абсолютными датами ( naive ) информация о временном поясе не учитывается. В случае же с относительными ( aware ) информация про временной пояс передается и также учитывается летнее время. Соответственно, абсолютные данные удобнее для работы.

Отличия между основными стандартами времени

  • GMT (Greenwich Mean Time — среднее время по Гринвичу или гринвичское время) — это официальный часовой пояс, используемый в некоторых странах Европы и Африки. Например, местное время для Берлина 2020–10–17 09:40:33.614581+02:00 GMT. Время в Санкт-Петербурге на 3 часа опережает время в GMT.

Курс UI/UX для геймдеву.

Під час навчання ви розробите проекти для портфоліо, що складається з 5 ключових аспектів UX/UI-дизайну, та отримаєш необхідні навички для професійного росту.

Как создать простой aware-объект datetime, учитывающий часовой пояс

import datetime dt_now = datetime.datetime.utcnow() print(dt_now)

Один из недостатков библиотеки datetime Python — отсутствие поддержки часовых поясов. В случае, когда нужно учитывать часовой пояс, используется другая библиотека – pytz . В первой строке кода эту библиотеку также нужно импортировать. Предположим, что нам необходимо задать время в столице Кении — Найроби:

import pytz import datetime tz_nairobi = pytz.timezone("Africa/Nairobi") dt_nairobi =datetime.datetime.now(tz_nairobi) print(dt_nairobi)

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

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