`datetime.strftime`和`datetime.strptime`以不同方式解释%Y

时间:2011-11-28 11:07:16

标签: python datetime datetime-format

我使用如下所示的语句从字符串创建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:
    ...

我想知道是否有更好的方法来进行此验证。

2 个答案:

答案 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以及是否返回错误。无需故意造成例外。