Неконвертированные данные остаются: 15

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

Я думал, что это потому, что мне нужны двузначные числа в течение дня и месяца, вот мой код, который вызывает ошибку.

start_day = randint(1,31)
strt_day = []
strt_day.append("%02d" % start_day)
start_day = strt_day 
strt_moth = []
start_month = randint(2,4)
strt_moth.append("%02d" % start_month)
start_month = strt_moth
start_date = ""+start_month[0]+"/"+start_day[0]+"/2015"
depart = datetime.datetime.strptime(start_date, "%m/%d/%y")

Любая идея о том, что я делаю неправильно?

Спасибо

1 ответ

Поскольку %y предназначен для двухзначного года, поэтому 2015 интерпретируется как 20 (т.е. 2020), а 15 остается:

>>> import datetime
>>> datetime.datetime.strptime("01/02/20", "%d/%m/%y")
datetime.datetime(2020, 2, 1, 0, 0)
>>> datetime.datetime.strptime("01/02/2015", "%d/%m/%y")
Traceback (most recent call last):
 File "<pyshell#1>", line 1, in <module>
 datetime.datetime.strptime("01/02/2015", "%d/%m/%y")
 File "C:\Python27\lib\_strptime.py", line 328, in _strptime
 data_string[found.end():])
ValueError: unconverted data remains: 15
</module></pyshell#1>

Вы хотите %y (отметить случай!), который представляет собой четырехзначный год:

>>> datetime.datetime.strptime("01/02/2015", "%d/%m/%Y")
datetime.datetime(2015, 2, 1, 0, 0)

Вы должны прочитать документы, которые объясняют различные директивы формата.

Однако дополнительные шаги с участием строк кажутся бессмысленными, почему бы просто не передать целые числа, которые вы создаете, на datetime.datetime?

>>> import random
>>> random.seed(0)
>>> datetime.datetime(2015, random.randint(2, 4), random.randint(1, 31))
datetime.datetime(2015, 4, 24, 0, 0)

Обратите внимание, что это может привести к недопустимым датам (например, февраль не имеет 30-го!):

>>> random.seed(8)
>>> datetime.datetime(2015, random.randint(2, 4), random.randint(1, 31))
Traceback (most recent call last):
 File "<pyshell#28>", line 1, in <module>
 datetime.datetime(2015, random.randint(2, 4), random.randint(1, 31))
ValueError: day is out of range for month
</module></pyshell#28>

licensed under cc by-sa 3.0 with attribution.