我需要确保用户以下列格式输入日期 -
1993年12月23日
如果它是一个月或一天的单个数字,我需要包含前导零。
我需要02/04/1998而不是2/4/1998
如何确保存在前导零或2位数?
这是我到目前为止所拥有的
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
但是,即使每月/每天输入一位数字,也会显示为true。
答案 0 :(得分:4)
不要过度工程......你可以只检查字符串的长度。这将在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'))
答案 1 :(得分:1)
无论用户输入是什么,您都可以将其转换为所需的格式。
NA
并确保用户输入格式如下
DELIMITER $$
CREATE
TRIGGER tr_Late_Fee AFTER UPDATE
ON BOOKS
FOR EACH ROW BEGIN
IF NEW.DaysOut = 90 THEN
UPDATE CUSTOMERS
SET Fees = Fees + 10
WHERE Cust_ID = NEW.Cust_ID;
END IF;
END$$
DELIMITER ;
答案 2 :(得分:0)
我会通过一个循环处理这个来获取用户的输入。
提示用户输入一个值(让他们知道应该如何格式化),然后尝试像你一样投射它。
如果演员成功,那么你打破循环并继续。如果失败......
您捕获错误并显示有关格式无效的消息并重复步骤1.循环直至获得有效值。
good_value = false
value = ""
while good_value == false:
value = input("Insert Date in format...")
try:
datetime.strptime(d, '%m/%d/%Y')
good_value = true
except ValueError:
print("Error: Date format invalid.")
答案 3 :(得分:0)
我不知道有办法迫使strptime
验证领先0。如你所说,它对2/4/1998和02/04/1998都很满意。除了正则表达式之外,我不知道有什么方法可以做到这一点:
import re
regex = r'\d{2}/\d{2}/\d{4}'
if re.match(d):
# then it matches the syntax you want
但你仍然想使用strptime来验证输入,所以你不会得到像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次。