使用strptime()解析两位数年份的生日效果不佳
考虑以下的出生日期(用 dob
表示):
- 1968年6月1日
- 1969年6月1日
当使用Python的 datetime.strptime(dob, '%d-%b-%y')
来解析这些日期时,结果会是:
datetime.datetime(2068, 6, 1, 0, 0)
datetime.datetime(1969, 6, 1, 0, 0)
当然,它们应该是在同一个十年出生的,但现在居然不在同一个世纪了!
根据文档,这种情况是完全正常的:
当接受两位数的年份时,它们会根据POSIX或X/Open标准进行转换:69到99的值会被映射到1969到1999,而0到68的值会被映射到2000到2068。
我明白这个函数为什么会这样设置,但有没有办法解决这个问题呢?也许可以通过定义自己的两位数年份范围来实现?
3 个回答
0
如果你在等着过生日,你可以手动调整一下数据——把任何未来的日期都自动改成一百年前的日期,或者类似的做法。
2
这个函数的作用是把年份调整到1950年:
def millenium(year, shift=1950):
return (year-shift)%100 + shift
12
如果你总是用它来计算生日的话,只需要在年份晚于现在的时候减去100就可以了:
if d > datetime.now():
d = datetime(d.year - 100, d.month, d.day)