2016-11-21 3 views
0

Я хочу, чтобы моя программа принимала пользовательский ввод в виде даты и элемента управления, если она действительна. Но с кодом, который я знаю, программа говорит, что это неправильно, независимо от формата, который я даю. Я не вижу проблемы с кодом:Python Error Control Date

import datetime 
def visit_date(): 
    while True: 
     date_visit = input("Enter the date you want to visit the Zoo in YYYY-MM-DD format: ") 
     try: 
      return datetime.datetime.strptime(date_visit, "%d/%m/%y") 
     except ValueError: 
      print("Not a valid format\n") 

ответ

1

Вы спрашиваете у пользователя дату в формате YYYY-MM-DD но затем пытается разобрать его в соответствии с этим форматом %d/%m/%y.

Вы должны вместо разобрать строку таким же образом, что вы просили его, %Y-%m-%d

+0

О, спасибо большое! –

+0

Без проблем! Если это ответит на ваш вопрос, можете ли вы пометить его как принятый? – Alex

0

Вы ищете формат %d/%m/%y и просить %Y-%m-%d

> date_visit = '2016-11-23' 
> datetime.datetime.strptime(date_visit, "%Y-%m-%d") 
datetime.datetime(2016, 11, 23, 0, 0) 

Некоторые замечания:

  • %Y: Год в четыре цифры
    %y: год в двух разрядах.
  • %d/%m/%y переводит на "день месяца в виде одной или двух цифр, /, месяц года в виде одной или двух цифр, / год в двух разрядах".
  • %Y-%m-%d переводит "четырехзначный год, -, месяц из года, - день-месяц"
0

Ваше приглашение попросит Вас ввести в YYYY-MM-DD, но ваш strptime является пытаясь использовать формат %d/%m/%y. Вы должны иметь форматы, чтобы соответствовать для strptime работы

import datetime 

d = '2016-11-21' 
d = datetime.datetime.strptime(d, "%Y-%m-%d") 
d = datetime.datetime(2016, 11, 21, 0, 0) 

>>> 2016-11-21 00:00:00 

d = '11/21/2016' 
d = datetime.datetime.strptime(d, "%d/%M/%Y") 
d = datetime.datetime(2016, 11, 21, 0, 0) 

>>> 2016-11-21 00:00:00 

Я лично хотел бы использовать python-dateutil модуль для разбора даты строк, что позволяет для различных форматов

пункта установить питон-dateutil

from dateutil.parser import parse 

d1 = 'Tuesday, October 21 2003, 12:14 CDT' 
d2 = 'Dec. 23rd of 2012 at 12:34pm' 
d3 = 'March 4th, 2016' 
d4 = '2015-12-09' 

print(parse(d1)) 
>>> 2003-10-21 12:14:00 

print(parse(d2)) 
>>> 2012-12-23 12:34:00 

print(parse(d3)) 
>>> 2016-03-04 00:00:00 

print(parse(d4)) 
>>> 2015-12-09 00:00:00