У меня есть свидание, "10/10/11(m-d-y)"
и я хочу добавить к нему 5 дней, используя скрипт Python. Пожалуйста, рассмотрите общее решение, которое работает и в конце месяца.
Я использую следующий код:
import re
from datetime import datetime
StartDate = "10/10/11"
Date = datetime.strptime(StartDate, "%m/%d/%y")
print Date
-> это печать '2011-10-10 00:00:00'
Теперь я хочу добавить 5 дней к этой дате. Я использовал следующий код:
EndDate = Date.today()+timedelta(days=10)
Который вернул эту ошибку:
name 'timedelta' is not defined
name 'timedelta' is not defined
, это означает, что выtimedelta
нигде не определились . Python обычно довольно информативен о своих сообщениях об ошибках.Ответы:
Предыдущие ответы верны, но обычно это лучше делать:
Тогда вы будете иметь, используя
datetime.timedelta
:источник
strptime
методdatetime
класса вdatetime
модуле, поэтому вам нужно указатьdatetime.datetime
.datetime
? Вы не можете полагаться на соглашение, чтобы знать, но всегда должны смотреть на импорт.from datetime import DateTime
так как классы имеют CamelCased, но datetime предшествует PEP8.Импорт
timedelta
иdate
первый.И
date.today()
вернется сегодняшняя дата, может быть, вы хотитеисточник
date
объекта нетtimedelta
метода. Какую версию Python вы используете?from datetime import timedelta, date; date.today() + timedelta(days=10)
Если вы уже используете панды , вы можете сэкономить немного места, не указав формат:
источник
Я полагаю, вам не хватает чего-то такого:
источник
Вот еще один метод добавления дней в дату, используя относительную дельту dateutil .
Вывод:
источник
Если вы хотите добавить дни на сегодняшний день, вы можете использовать этот код
источник
Вот функция получения с сегодняшнего дня + указанные дни
Применение:
источник
Чтобы иметь менее подробный код и избежать конфликтов имен между datetime и datetime.datetime , вы должны переименовать классы с именами CamelCase .
Таким образом, вы можете сделать следующее, что я думаю, это понятнее.
Кроме того, не будет конфликта имен, если вы захотите
import datetime
позже.источник
используя
timedelta
s вы можете сделать:источник
Обычно вы уже получили ответ, но, возможно, мой класс, который я создал, также будет полезен. Для меня это решает все мои требования, которые я когда-либо имел в моих проектах Pyhon.
Как это использовать
self.tz = pytz.timezone("Europe/Warsaw")
- здесь вы определяете часовой пояс, который хотите использовать в проектеGetDate("2019-08-08").current()
- это преобразует вашу строковую дату в объект, учитывающий время, с часовым поясом, который вы определили в пункте 1. Формат строки по умолчанию установлен,format="%Y-%m-%d"
но вы можете изменить его. (например.GetDate("2019-08-08 08:45", format="%Y-%m-%d %H:%M").current()
)GetDate("2019-08-08").get_month_first_day()
возвращает заданную дату (строку или объект) месяц первый деньGetDate("2019-08-08").get_month_last_day()
возвращает заданную дату месяц последний деньGetDate("2019-08-08").minimum_time()
возвращает заданную дату день началаGetDate("2019-08-08").maximum_time()
возвращает заданную дату окончания дняGetDate("2019-08-08").time_delta_days({number_of_days})
возвращает заданную дату + добавить {количество дней} (вы также можете позвонить:GetDate(timezone.now()).time_delta_days(-1)
на вчера)GetDate("2019-08-08").time_delta_haours({number_of_hours})
аналогично пт 7, но работает на часахGetDate("2019-08-08").time_delta_seconds({number_of_seconds})
аналогично пт 7, но работает на секундахисточник
Некоторое время нам нужно использовать поиск по дате и дате. Если мы используем date__range, то нам нужно добавить 1 день с to_date, иначе набор запросов будет пуст.
Пример:
из даты и времени импорта
from_date = parse_date (request.POST ['from_date'])
to_date = parse_date (request.POST ['to_date']) + timedelta (days = 1)
Participance_list = models.DailyAttendance.objects.filter (attdate__range = [from_date, to_date])
источник