我使用如下所示的语句从字符串创建datetime
对象:
t = datetime.strptime("0023-10-10", "%Y-%m-%d")
稍后,我的代码中的某处使用t
对象并使用相同的格式字符串调用strftime
方法:
t.strftime("%Y-%m-%d")
这会导致ValueError: year=23 is before 1900; the datetime strftime() methods require year >= 1900
。
似乎%Y输入的验证在这两种类似的方法中是不同的。
所以我必须做以下事情,以确保我不接受像23
这样糟糕的岁月:
try:
format = "%Y-%m-%d"
t = datetime.strptime("0023-10-10", format)
t.strftime(format)
except ValueError:
...
我想知道是否有更好的方法来进行此验证。
答案 0 :(得分:4)
我喜欢你使用try..except
来验证输入的想法,因为在未来的Python版本中,几年< 1000可能是可以接受的。
This comment表明此限制仅限于Python当前的strftime实现。
在Python 2.7中,years < 1900
发生异常,但是
在Python 3.2中,years < 1000
发生异常:
import datetime as dt
format = "%Y-%m-%d"
t = dt.datetime.strptime("0023-10-10", format)
try:
t.strftime(format)
except ValueError as err:
print(err)
打印
year=23 is before 1000; the datetime strftime() methods require year >= 1000
答案 1 :(得分:2)
您只需检查if t.year < 1900
以及是否返回错误。无需故意造成例外。