Python: добавление 3 недель к любой дате

Мне нужна помощь с программой.
Как добавить 3 недели (21 день) к любой дате, когда пользователь может управлять датой?

Пользователь вводит дату ГГГГ-ММ-ДД.

Ниже я пытаюсь найти дефис и убедиться, что их всего 2. Это то, что у меня есть до сих пор, но все, что он делает, это повторяется, может кто-нибудь сказать мне, где я ошибся?:

date = raw_input("Enter date: ")
i = 0
while i <= len(date):
    if date[i] != "-":
    i = i + 1
print date

Сейчас я выбираю год, месяц, день. Есть ли более простой способ сделать это, потому что мне нужно учитывать месяцы смены и т. Д.?

year = date[0:4]
month = date[5:7]
day = date[9:11]

Благодарность


person monica    schedule 04.03.2011    source источник


Ответы (4)


Используйте для задачи модуль datetime. Вы создаете объект, поддерживающий дату и время, и добавляете к нему объект timedelta за 21 день.

>>> import datetime
>>> u = datetime.datetime.strptime("2011-01-01","%Y-%m-%d")
>>> d = datetime.timedelta(days=21)
>>> t = u + d
>>> print(t)
2011-01-22 00:00:00
person Senthil Kumaran    schedule 04.03.2011
comment
большое спасибо, но я думаю, что мне придется сделать это по старинке... нас никогда не учили свиданиям. - person monica; 04.03.2011
comment
senthil - спасибо за поддержку! я думаю, я пойду читать голову, я действительно не хочу писать тонны кода для того, что можно так упростить. я не могу благодарить вас за то, что вы показали мне. - person monica; 04.03.2011
comment
@monica, если бы вы не использовали datetime и timedelta, вам определенно понадобилась бы куча кода для учета разной продолжительности месяцев, особенно февраля в високосные годы, и увеличения года, если 3 недели заставят вас пройти мимо конец декабря и т.д. - person John La Rooy; 04.03.2011
comment
@gnibbler, похоже, я проделал долгий путь, обнаружил, что мне не разрешено использовать дату и время - person monica; 05.03.2011

Вы можете использовать объект datetime.timedelta для представления 3 недель, а затем просто добавить его к объекту datetime, который представляет ввод пользователя.

import datetime

date = raw_input("Enter date: ")
aDate = datetime.datetime.strptime(date,"%Y-%m-%d")
threeWeeks = datetime.timedelta(weeks = 3)

print aDate + threeWeeks

См. http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior для получения подробной информации об использовании метода strptime.

person Alex Q    schedule 04.03.2011
comment
q, спасибо за всю вашу помощь и за столь быстрый ответ. Я очень благодарен. - person monica; 04.03.2011

Попробуйте это, я уверен, что это самый короткий и простой способ

from datetime import date

from dateutil.relativedelta import relativedelta

period = date.today() + relativedelta(weeks=+1)

person Randall Moore    schedule 15.02.2020
comment
Я очень ценю это, Рэндалл. Иногда сторонний пакет делает все гораздо более читабельным. - person Zev Averbach; 26.04.2021

вы можете использовать datetime.strptime для получения ввода от пользователя в качестве даты

from datetime import datetime
i = str(raw_input('date'))
try:
    dt_start = datetime.strptime(i, '%Y, %m, %d')
except ValueError:
    print "Incorrect format"

а затем добавить 3 недели (21 день)

dt_start = dt_start + datetime.timedelta(days=21)

Ну вот

person noobsee    schedule 18.09.2015
comment
(1) вам не нужно str() вокруг raw_input(). (2) и strptime(), и timedelta() уже показаны здесь - я не вижу, что ваш ответ добавляет здесь к ответу выложил 4 года назад. - person jfs; 18.09.2015