datetime如何要求2位数的天和月?

2024-04-26 12:09:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用datetime模块来检查日期,看它们是采用mm/dd/yyy还是mm/dd/yy格式。问题是%d和%m指令不够敏感,无法检测月份或日期是个位数,这是我的要求。在

datetime.strptime('01/01/2001', '%m/%d/%Y')

就像我想要的那样,但是

^{pr2}$

同时生成一个有效的datetime,当我真的希望它抛出一个ValueError时,除非月份和日期是0填充的。有人知道如何设置日期时间格式所需的精度吗?这是可能的还是我应该改为使用regex?在


Tags: 模块datetime格式指令时间精度ddmm
2条回答

您使用的datetime函数不是为了验证输入,只是为了将字符串转换成datetime对象。就datetime而言,这两个示例都是合法的字符串输入。在

如果您想将用户输入强制为特定格式,我将使用regex-请参阅我的REPL中的示例:

>>> import re
>>> pattern = re.compile(r"^[0-9]{2}/[0-9]{2}/[0-9]{4}$")
>>> def valid_datestring(datestring):
...     if pattern.match(datestring):
...         return True
...     return False
...
>>> valid_datestring('1/1/2001')
False
>>> valid_datestring('01/01/2001')
True

如果要定义返回格式化日期或返回valueError的函数,可以执行以下操作:

^{pr2}$

您可以通过重新格式化datetime并与原始字符串进行比较来验证字符串是否完全符合格式化字符串:

datetime_ = datetime.strptime(datetime_string, DATETIME_FORMAT)
if datetime_.strftime(DATETIME_FORMAT) != datetime_string:
    [fail]

相关问题 更多 >