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

sat*_*oru 6 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:
    ...
Run Code Online (Sandbox Code Playgroud)

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

unu*_*tbu 4

我喜欢你使用 atry..except来验证输入的想法,因为在 Python 的未来版本中,年数 < 1000 可能是可以接受的。

代码中的注释表明此限制仅限于 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)
Run Code Online (Sandbox Code Playgroud)

印刷

year=23 is before 1000; the datetime strftime() methods require year >= 1000
Run Code Online (Sandbox Code Playgroud)