2016-11-21 74 views
0

我希望我的程序以日期和控件的形式接受用户输入(如果它有效)。但是通过代码,我知道程序会说,不管我给的格式是什么都是错误的。我没有看到问题的代码:Python错误控制日期

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模块用于解析日期字符串,它允许不同的格式

PIP安装python-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