如何在Python中验证日期

2 投票
3 回答
14372 浏览
提问于 2025-04-18 18:18

你好,我想在Python中验证一些日期。但是我遇到一个问题,我有一个特定的日期范围,比如我的日期是从1/1/201408/07/2014。所以我想知道怎么才能同时验证日期的格式和具体的值。我查看了这个链接,但它只验证了格式,并没有验证具体的值。

import time
date = input('Date (mm/dd/yyyy): ')enter date here
try:
    valid_date = time.strptime(date, '%m/%d/%Y')
except ValueError:
    print('Invalid date!')

如何在Python 3.x中验证日期?

3 个回答

1

这段内容是关于编程问题的讨论,涉及到一些技术细节。它可能会提到如何解决特定的编程难题,或者分享一些代码示例来帮助理解。具体的代码块

import datetime

inputDate = input("Enter the date in format 'dd/mm/yy' : ")

day,month,year = inputDate.split('/')

isValidDate = True
try :
    datetime.datetime(int(year),int(month),int(day))
except ValueError :
    isValidDate = False

if(isValidDate) :
    print ("Input date is valid ..")
else :
    print ("Input date is not valid..")
可能包含了实际的代码,展示了如何实现某个功能或解决某个问题。

2

我想建议把这个放到一个函数里:

from datetime import datetime


def validate_date(input_date, first=datetime(2014, 1, 1),
                              last=datetime(2014, 8, 7),
                              fmt='%m/%d/%Y'):
    """Return a validated datetime.datetime or None.

    If the date has the wrong format return None, or if it is not in
    the range [first,last] also return None.  Otherwise return the
    input_date as a datetime.datetime object.

    """
    try:
        d = datetime.strptime(input_date, fmt)
        if not (first <= d <= last):
            raise ValueError
    except ValueError:
        return None
    else:
        return d


# Example usage...
valid_date = validate_date(input('Date mm/dd/yyyy: '))
if valid_date is not None:
    print(valid_date)
else:
    print('Date not ok!')
6

与其使用 time.strptime(),不如使用 datetime.datetime.strptime(),然后检查得到的对象是否在你设定的范围内:

from datetime import datetime, date
date_input = input('Date (mm/dd/yyyy): ')
try:
    valid_date = datetime.strptime(date_input, '%m/%d/%Y').date()
    if not (date(2014, 1, 1) <= valid_date <= date(2014, 8, 7)):
        raise ValueError('Date out of range')
except ValueError:
    print('Invalid date!')

如果没有出现异常,那么 valid_date 就会是一个 datetime.date() 实例

撰写回答