6

考虑以下生日(如dob):

  • 68 年 6 月 1 日
  • 69 年 6 月 1 日

当用 Python 解析时,datetime.strptime(dob, '%d-%b-%y')将产生:

  • datetime.datetime(2068, 6, 1, 0, 0)
  • datetime.datetime(1969, 6, 1, 0, 0)

好吧,他们当然应该在同一个十年出生,但现在甚至不是在同一个世纪!

根据文档,这是完全有效的行为:

当接受 2 位数年份时,它们会根据 POSIX 或 X/Open 标准进行转换:值 69-99 映射到 1969-1999,值 0-68 映射到 2000-2068。

我理解为什么要这样设置该功能,但有没有办法解决这个问题?也许通过定义您自己的 2 位数年份范围?

4

3 回答 3

12

如果您总是在生日时使用它,如果年份在现在之后,只需减去 100:

if d > datetime.now():
    d = datetime(d.year - 100, d.month, d.day)
于 2010-07-19T17:07:45.273 回答
2

此函数将年份转移到 1950:

def millenium(year, shift=1950):
    return (year-shift)%100 + shift
于 2010-07-19T17:12:29.927 回答
0

如果你期待生日,你总是可以手动处理数据——未来的任何日期都会自动倒退一个世纪,或者类似的。

于 2010-07-19T17:07:47.957 回答