我正在尝试验证一个字符串,该字符串应该包含ISO 8601格式的时间戳(通常用于JSON).
strptime在验证零填充时,Python 似乎非常宽容,请参阅下面的代码示例(注意小时缺少前导零):
>>> import datetime
>>> s = '1985-08-23T3:00:00.000'
>>> datetime.datetime.strptime(s, '%Y-%m-%dT%H:%M:%S.%f')
datetime.datetime(1985, 8, 23, 3, 0)
Run Code Online (Sandbox Code Playgroud)
它优雅地接受一个字符串,该字符串例如小时不填充零,并且不会ValueError像我期望的那样抛出异常.
有没有办法强制执行strptime来验证它是否为零填充?或者Python的标准库中是否还有其他内置函数?
我想避免regexp为此写自己的.
已经有一个答案,用 Python strptime() 解析 ISO8601 或 RFC3339 日期/时间是不可能的:How to parse an ISO 8601-formatted date? 因此,为了回答您的问题,标准 Python 库中没有办法可靠地解析这样的日期。关于正则表达式的建议,一个日期字符串,如
2020-14-32T45:33:44.123
Run Code Online (Sandbox Code Playgroud)
将导致一个有效的日期。有很多 Python 模块(如果您在https://pypi.python.org上搜索“iso8601” ),但是构建完整的ISO8601 验证器需要诸如闰秒、可能的时区偏移值列表等等.