2016-11-21 3 views
0

Ich möchte, dass mein Programm Benutzereingaben in Form eines Datums und des Steuerelements nimmt, wenn es gültig ist. Aber mit dem Code, den ich kenne, sagt das Programm, dass es falsch ist, egal welches Format ich gebe. Ich sehe nicht das Problem mit dem Code: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") 

Antwort

1

Sie den Benutzer für ein Datum im Format YYYY-MM-DD fragen, aber dann ist es zu analysieren versucht, nach diesem Format %d/%m/%y.

Sie sollten stattdessen die Zeichenfolge in der gleichen Art und Weise analysieren, die wo sie angefordert werden, %Y-%m-%d

+0

Oh, vielen Dank! –

+0

Kein Problem! Wenn dies Ihre Frage beantwortet, können Sie es bitte als akzeptiert markieren? – Alex

0

Sie suchen Format %d/%m/%y und bat um %Y-%m-%d

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

Einige Hinweise:

  • %Y: Jahr in vier Ziffern
    %y: Jahr in zwei Ziffern.
  • %d/%m/%y übersetzt in "Tag des Monats in ein oder zwei Ziffern, /, Monat des Jahres in ein oder zwei Ziffern, / Jahr in zwei Ziffern".
  • %Y-%m-%d übersetzt "vierstelliges Jahr -, Monat-of-Jahr - Tage-of-month"
0

Ihre promptes fragen Sie in YYYY-MM-DD geben, aber Ihre strptime ist Versuchen, das Format %d/%m/%y zu verwenden. Sie müssen die Formate haben für strptime passen

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 

ich persönlich arbeiten die python-dateutil Modulstrings für das Parsen von Datum zu verwenden, die für verschiedene Formate

erlaubt dateutil python-

pip installieren
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