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

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:

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

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:
        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'))

我会通过一个循环来处理这个问题,从用户那里获取输入

  • 提示用户输入一个值(让他们知道它应该如何格式化),然后像您这样尝试强制转换它

  • 如果强制转换成功,则中断循环并继续。如果失败了

  • 捕获错误并显示有关无效格式的消息,然后重复步骤1。循环,直到获得有效值


  • 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,谢谢!我想在日期时间中有一些符号可以做到这一点,但这同样有效。