使用strptime()的2位数年不得不解析生日
-
17-09-2020 - |
题
考虑以下生日(作为dob
):
- 1-jun-68
- 1-jun-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。
我理解为什么函数是这样的,但有没有办法解决这个问题?也许在定义自己的2位数年份的范围?
解决方案
如果您始终使用它生日,只要年份在现在之后减去100:
if d > datetime.now():
d = datetime(d.year - 100, d.month, d.day)
. 其他提示
这个函数转移到1950年:
def millenium(year, shift=1950):
return (year-shift)%100 + shift
. 如果您期待生日,您可以随时手动按摩数据 - 未来的任何日期都会自动恢复一个世纪,或者一些日期。
不隶属于 StackOverflow