Python 如何确保用户输入日期的格式正确
我需要确保用户以以下格式输入日期- 1993年12月23日 如果是个位数的月或日,则需要包含前导零 我需要的是1998年4月2日而不是1998年4月2日 如何确保前导零或2位数字存在 这就是我目前所拥有的Python 如何确保用户输入日期的格式正确,python,string,date,datetime,Python,String,Date,Datetime,我需要确保用户以以下格式输入日期- 1993年12月23日 如果是个位数的月或日,则需要包含前导零 我需要的是1998年4月2日而不是1998年4月2日 如何确保前导零或2位数字存在 这就是我目前所拥有的 from datetime import datetime def validate_date(d): try: datetime.strptime(d, '%m/%d/%Y') return True except ValueError:
from datetime import datetime
def validate_date(d):
try:
datetime.strptime(d, '%m/%d/%Y')
return True
except ValueError:
return False
print validate_date('02/26/2009') # prints False
但是,即使为月/日输入了一位数字,也会打印为真 不要过度设计。。。您可能只需要检查字符串的长度。这将在1000-9999年间起作用
from datetime import datetime
def validate_date(d):
try:
if len(d) == 10:
datetime.strptime(d, '%m/%d/%Y')
return True
else: return False
except ValueError:
return False
print(validate_date('2/26/1000'))
我会通过一个循环来处理这个问题,从用户那里获取输入
good\u值=false
value=“”
当good_值==false时:
值=输入(“以格式插入日期…”)
尝试:
datetime.strtime(d,'%m/%d/%Y')
好值=真值
除值错误外:
打印(“错误:日期格式无效。”)
我不知道有什么方法可以强制strtime
验证是否存在前导0。正如你所说,它对1998年2月4日和1998年2月4日都很满意。除了正则表达式之外,我不知道有什么方法可以做到这一点:
import re
regex = r'\d{2}/\d{2}/\d{4}'
if re.match(d):
# then it matches the syntax you want
但是您仍然希望使用strtime来验证输入,这样就不会出现像“99/99/0123”这样的混乱
当你把它们放在一起时,你需要这样的东西:
from datetime import datetime
import re
def validate_date(d):
try:
regex = r'\d{2}/\d{2}/\d{4}'
if re.match(d):
datetime.strptime(d, '%m/%d/%Y')
return True
except ValueError:
return False
return False
如果您不熟悉正则表达式,那么这是一个相对简单的正则表达式。前导的
r
告诉python这是一个原始字符串,它不应该处理反斜杠\d
表示任何数字,{2}
和{4}
表示它应该分别重复(任何数字)2次和4次。无论用户输入什么,都可以将其转换为所需的格式
>>> date_string = '2/4/1998'
>>> datetime.datetime.strptime(date_string, '%m/%d/%Y').strftime('%m/%d/%Y')
'02/04/1998'
并确保用户输入的格式如下
def validate_date_format(date_string):
try:
datetime.datetime.strptime(date_string, '%m/%d/%Y')
except ValueError:
raise ValueError("Date format should be MM/DD/YYYY")
您可以使用格式为MM/dd/yyyy的datetimepicker,这将强制您使用正确的格式。我不熟悉datetimepicker,可以解释吗?抱歉,没有查看标记,以为我在VB.Net中:(用户是如何提交日期的?使用命令行参数还是原始输入。这两种方法都适用于meWorks,谢谢!我想在日期时间中有一些符号可以做到这一点,但这同样有效。