考虑以下生日(作为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
.

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top