python как прибавить дни к дате
Добавление 5 дней к дате в Python
у меня дата «10/10/11(m-d-y)» и я хочу добавить к нему 5 дней с помощью скрипта Python. Пожалуйста, рассмотрите общее решение, которое также работает в конце месяца.
Я использую следующий код:
теперь я хочу добавить 5 дней к этой дате. Я использовал следующий код:
который вернул эту ошибку:
9 ответов
предыдущие ответы верны, но это, как правило, лучшая практика:
тогда у вас будет, используя datetime.timedelta :
импорт timedelta первый.
и Date.today() вернет сегодняшнее время, может быть, вы хотите
Я думаю, вам не хватает чего-то подобного:
Если вы уже используете pandas, вы можете сэкономить немного места, не указав формат:
вот еще один способ добавить дни на дату, используя dateutil по relativedelta.
Через 5 Дней: 30/06/2015 15:56:09
вот функция получения от now + указанных дней
для того, чтобы иметь менее многословный код, а не конфликты имен между datetime и datetime.datetime, вы должны переименовать классы с CamelCase имена.
таким образом, вы можете сделать следующее, что я думаю, что это ясно.
кроме того, будет нет конфликта имен если вы хотите import datetime позже.
Если вы хотите добавить дни к дате теперь вы можете использовать этот код
Это моя начальная, но более полная разработка для общей функции dateadd в python
Работа с датой и временем в Python
Модуль datetime
Модуль datetime содержит классы:
Класс datetime.date
Класс datetime.date принимает три аргумента: год, месяц и день.
Давайте посмотрим, какой сейчас день:
Класс datetime.datetime
Класс datetime.datetime принимает аргументы: год, месяц, день, час, минута, секунда и микросекунда.
Давайте посмотрим, какое сейчас время:
Получить из объекта 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 | До полудня или после (AM или PM) |
| %S | Секунда. Цифровой формат [00,61] |
| %U | Номер недели в году. Цифровой формат [00,53] (с воскресенья) |
| %w | День недели. Цифровой формат [0(воскресенье), 6] |
| %W | Номер недели в году. Цифровой формат [00,53] (с понедельника) |
| %x | Дата |
| %X | Время |
| %y | Год без века. Цифровой формат [00,99] |
| %Y | Год с веком. Цифровой формат |
| %Z | Временная зона |
| %% | Знак процента |
Методы класса datetime :
Класс datetime.timedelta
Получить результат в секундах позволяет метод total_seconds() :
Прибавить к текущей дате 10 дней, 10 часов и 10 минут:
Модуль time
Модуль основан на «эпохе Unix», которая началась 1 января 1970 года:
Импорт модуля осуществляется следующим путем:
Навигация по посту
Получение текущей даты и времени
Для вывода даты и времени нужно выполнить следующее:
Как видно мы получаем для создания объекта даты и времени используется класс с тем же именем что и модуль datetime.
Когда нужно получить только дату используется класс date:
Получение только времени выполняется через метод time():
Каждый из описываемых классов можно импортировать следующим способом:
Форматирование и перевод в строку
Для получение части даты или времени можно использовать следующие атрибуты:
Так же есть метод strftime, который форматирует даты в нужном формате в строку. Например так мы получим дату в формате, который используется у нас:
Таким же способом можно получить время и дату:
Обратите внимание, что таким способом мы преобразуем объект класса datetime в строку и мы больше не сможем использовать методы по работе с датой (например сравнение):
Мы получим ошибку так как уже работаем со строкой:
Выше описаны основные возможности форматирования используя метод strftime(), но их, конечно, больше.
Получения дня недели и название месяца
Можно получить название дня недели или название. Численный вариант эквивалентен следующим значениям:
Следующий пример вернет день недели в виде числа:
Или получить название:
Такой же принцип по работе с месяцами, где:
Создание объекта даты и времени
Для создания даты используется класс с аргументами date(год, месяц, число):
Можно создать дату и время. В обоих случаях мы можем использовать именованные аргументы если так удобнее:
Каждый аргумент времени, по умолчанию, имеет значение 0. Мы так же можем использовать подход выше для получения, например, только года или времени:
Если вы не укажете год, месяц или день, то получите ошибку т.к. они по умолчанию равны None:
Есть отдельный класс для создания времени time:
Создание из строк
Используя strptime() можно создавать объект datetime из строки:
Продолжительность времени с timedelta
Все атрибуты, которые мы можем указывать для этого класса:
Кроме этого мы можем преобразовывать эти объекты в секунды:
Разница между датами
Мы можем искать разницу между датами получая объект timedelta:
Изменение объектов
Каждый их объектов выше можно изменить. Так мы изменим объект timedelta прибавив часы к минутам:
С помощью timedelta изменяется и дата. Пример ниже изменяет текущую дату прибавляя к ней 1 день и 1 час:
Сравнение и условия
Каких либо хитростей в сравнении объектов нет. В следующем примере идет сравнение двух дат с разницей в день:
При этом стоит проверять, что объекты относятся к классу datetime, а не являются строками. В следующем примере мы сравниваем года, но они уже относятся к численным:
Объект timedelta тоже можно сравнивать:
Работа с метками (штампами) timestamp
При работе с API или в Unix системах мы можем увидеть отображение времени в таком формате:
Данные числа обозначают количество секунд с 1 января 1970 года. Мы можем конвертировать данное число в понятный формат используя datetime:
Так же сработает если мы хотим получить и время:
Для конвертирования в timestamp используется метод с аналогичным названием:
Работа с часовыми поясами
К сожалению у меня нет большого опыта работы с часовыми поясами и примеры ниже не стоит рассматривать как лучшие практики.
Библиотека datetime не хранит часовые пояса, данные о переводах часов (летнее и зимнее время) и високосных секундах. К тому же, некоторые страны, могут изменить время опираясь на локальные ситуации. Эти ситуации опасны, когда идет запись в базу данных. Для вывода в GUI, можно использовать datetime.datetime.now() или высчитывать часовой пояс из базы.
Для записи в базу данных мы можем использовать время UTC и отдельно считать часовой пояс:
Следующий пример вычислит разницу времени между UTC и локальным. Насколько я знаю он может не сработать на версиях Python
Как использовать модуль datetime в Python
Datetime — важный элемент любой программы, написанной на Python. Этот модуль позволяет управлять датами и временем, представляя их в таком виде, в котором пользователи смогут их понимать.
datetime включает различные компоненты. Так, он состоит из объектов следующих типов:
Как получить текущие дату и время?
Получить текущую дату в Python
Класс date можно использовать для получения или изменения объектов даты. Например, для получения текущей с учетом настроек подойдет следующее:
Текущая дата — 2020-11-14 в формате год-месяц-день соответственно.
Получить текущее время
Для получения текущего локального времени сперва нужно получить текущие дату и время, а затем достать из этого объекта только время с помощью метода time() :
Компоненты datetime в Python
В этом руководстве речь пойдет о следующих элементах:
Как создавать объекты даты и времени
В этом примере создается объект времени представленный следующим образом (8, 48, 45).
Для создания объекта даты нужно передать дату с использованием следующего синтаксиса:
Вернет вот такой результат:
Timedelta
Все аргументы опциональные и их значения по умолчанию равно 0. Они могут быть целыми или числами с плавающей точкой, как положительными, так и отрицательными. Благодаря этому можно выполнять математические операции, такие как сложение, вычитание и умножение.
Как вычислить разницу для двух дат
Посмотрим на несколько примеров вычисления разницы во времени. Предположим, есть два объекта datetime :
Для получения разницы нужно лишь вычесть значение одного объекта из второго:
Таким образом между 2 и 30 октября 2020 года 28 дней.
Как вычислить разницу двух объектов datetime.time
Такой код вернет следующую ошибку:
Как получать прошлые и будущие даты с помощью timedelta
Поскольку timedelta — это длительность, то для получения прошлой или будущей даты нужно добавить объект timedelta к существующему или вычесть из него же. Вот пример нескольких уравнений, где n — это целое число, представляющее количество дней:
Если нужно, например, получить дату за прошлые две недели, то достаточно вычесть 14 дней из текущей даты:
Предположим, вы задумали практиковать определенный навык в течение 21 дня. Для получения будущей даты нужно добавить 21 день к текущей дате:
Другие арифметические операции с timedelta
Значения даты и времени могут сравниваться для определения того, какая из них была раньше или позже. Например:
Часовые пояса
Пока что мы работали с datetime без учета часовых поясов и летнего времени. Но прежде чем переходить к следующим пунктам, нужно разобраться с разницей в абсолютных (naive) и относительных (aware) датах.
Абсолютные даты не содержат информацию, которая бы могла определить часовой пояс или летнее время. Однако с такими намного проще работать.
Относительные же содержат достаточно информации для определения часового пояса или отслеживания изменений из-за летнего времени.
Разница между DST, GMT и UTC
Как работать с часовыми поясами
Рассмотрим, как создать простой относительный объект datetime :
Предположим, нужно получить текущее время для Найроби. Для этого нужно использовать конкретный часовой пояс. Для начала можно с помощью pytz получить все существующие часовые пояса.
Вот некоторые из них:
Для получения времени в Найроби:
А вот так можно получить время Берлина:
Здесь можно увидеть разницу в часовых поясах разных городов, хотя сама дата одна и та же.
Конвертация часовых поясов
При конвертации часовых поясов в первую очередь нужно помнить о том, что все атрибуты представлены в UTC. Допустим, нужно конвертировать это значение в America/New_York :
Другие практические примеры
Всегда храните даты в UTC. Вот примеры:
Как конвертировать строки в datetime
strptime() в Python — это метод из модуля datetime. Вот его синтаксис:
Аргументы формата необязательные и являются строками. Предположим, нужно извлечь текущие дату и время:
Adding days to a date in Python
I have a date «10/10/11(m-d-y)» and I want to add 5 days to it using a Python script. Please consider a general solution that works on the month ends also.
I am using following code:
Now I want to add 5 days to this date. I used the following code:
Which returned this error:
15 Answers 15
The previous answers are correct but it’s generally a better practice to do:
Import timedelta and date first.
And date.today() will return today’s datetime, may be you want
If you happen to already be using pandas, you can save a little space by not specifying the format:
If you want add days to date now, you can use this code
Here is another method to add days on date using dateutil’s relativedelta.
After 5 Days: 30/06/2015 15:56:09
I guess you are missing something like that:
Here is a function of getting from now + specified days
In order to have have a less verbose code, and avoid name conflicts between datetime and datetime.datetime, you should rename the classes with CamelCase names.
So you can do the following, which I think it is clearer.
Also, there would be no name conflict if you want to import datetime later on.
using timedelta s you can do:
Generally you have’got an answer now but maybe my class I created will be also helpfull. For me it solves all my requirements I have ever had in my Pyhon projects.






























