如何确保用户输入日期格式正确

时间:2017-06-28 17:12:34

标签: python string date datetime

我需要确保用户以下列格式输入日期 -

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。

4 个答案:

答案 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. 提示用户输入一个值(让他们知道应该如何格式化),然后尝试像你一样投射它。

  2. 如果演员成功,那么你打破循环并继续。如果失败......

  3. 您捕获错误并显示有关格式无效的消息并重复步骤1.循环直至获得有效值。

  4. 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次。