我目前正在学习Python并自己学习一些数据验证。我坚持的一个部分是日期和时间验证。此计划采用了许多参数,包括date_start
,time_start
,date_end
和time_end
。问题是我需要ISO格式。一旦采用这种格式,我需要确保它们有效。这就是我被困的地方。
from datetime import datetime
def validate_date(date_start, time_start, date_end, time_end):
full_date_start = date_start + time_start
full_date_end = date_end + time_end
try:
formatted_time_start = datetime.strptime(full_date_start, "%Y-%m-%d%H:%M:%S").isoformat(sep="T", timespec="seconds")
formatted_time_end = datetime.strptime(full_date_end, "%Y-%m-%d%H:%M:%S").isoformat(sep="T", timespec="seconds")
return True
except ValueError:
return False
date_start = "2017-06-29"
time_start = "16:24:00"
date_end = "2017-06-"
time_end = "16:50:30"
print(validate_date(date_start, time_start, date_end, time_end))
print("Date Start: " + date_start + "\nTime Start: " + time_start + "\nDate End: " + date_end + "\nTime End: " + time_end)
我正在测试一些代码,删除date_end
的日期,我得到的输出是
2017-06-01T06:50:30
此检查应该失败,或者我认为它应该有,因为没有提供一天。任何帮助将不胜感激,如果有更简单的方法,我会接受它。谢谢!
答案 0 :(得分:4)
如果在执行失败的行之前检查full_date_end
的值,则会得到:"2017-06-16:50:30"
,因为您要查找的格式如下所示"%Y-%m-%d%H:%M:%S"
将第一个数字16作为日期值,将第二个数字作为小时值。
为避免这种情况,我建议使用以下格式:"%Y-%m-%d %H:%M:%S"
作为strptime调用的第二个参数。但是,您还需要更改定义full_date_start和full_date_end的行:
full_date_start = date_start + ' ' + time_start
full_date_end = date_end + ' ' + time_end
try:
formatted_time_start = datetime.strptime(full_date_start, "%Y-%m-%d %H:%M:%S").isoformat(sep="T", timespec="seconds")
formatted_time_end = datetime.strptime(full_date_end, "%Y-%m-%d %H:%M:%S").isoformat(sep="T", timespec="seconds")
...
我希望能解决你的问题。