2015-02-11 2 views
3

Я пытаюсь создать случайную дату и добавить несколько дней к этой дате, но я столкнулся с этой ошибкой. Я предполагаю, что это связано с форматом моей даты, но я не могу найти решение.Неконвертированные данные остаются: 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' является для ** двузначного года **, например, '20' ->' 2020'; '% Y' (примечание кейс!) - четыре цифры. Но почему бы вам просто не использовать 'datetime.datetime (2015, randint (2, 4), randint (1, 31))' (обратите внимание, что не все месяцы февраля-апреля имеют 31 день ...)? – jonrsharpe

+1

Смутно назвав ваши переменные как опечатки друг друга? – tripleee

+0

@jonrsharpe спасибо! да, вы правы, все, что вы видите, это просто я пытаюсь найти ошибку. – JordanBelf

ответ

4

Поскольку %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 

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

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

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


Однако дополнительные шаги, связанные строки кажутся бессмысленными, почему бы не просто передать целые числа вы создаете для 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 
Смежные вопросы