使用strptime()的2位数年份无法很好地解析生日

时间:2010-07-19 17:04:14

标签: python strptime 2-digit-year

考虑以下生日(dob):

  • 1君68
  • 1君69

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

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

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

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

  

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

我理解为什么函数设置如此,但是有办法解决这个问题吗?也许定义自己的两位数年份范围?

3 个答案:

答案 0 :(得分:12)

如果你总是在生日那天使用它,那么如果年份在现在之后就减去100:

if d > datetime.now():
    d = datetime(d.year - 100, d.month, d.day)

答案 1 :(得分:2)

此功能将年份转移到1950年:

def millenium(year, shift=1950):
    return (year-shift)%100 + shift

答案 2 :(得分:0)

如果您期待生日,您可以随时手动按摩数据 - 未来的任何日期都会自动设定为一个世纪,或某些日期。