使用 strptime() 的 2 位数年份无法很好地解析生日
考虑以下生日(如 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。
我明白为什么这个函数是这样设置的,但是有没有办法解决这个问题?也许可以定义自己的两位数年份范围?
Consider the following birthdays (as dob
):
- 1-Jun-68
- 1-Jun-69
When parsed with Python’s datetime.strptime(dob, '%d-%b-%y')
will yield:
datetime.datetime(2068, 6, 1, 0, 0)
datetime.datetime(1969, 6, 1, 0, 0)
Well of course they’re supposed to be born in the same decade but now it’s not even in the same century!
According to the docs this is perfectly valid behaviour:
When 2-digit years are accepted, they are converted according to
the POSIX or X/Open standard: values 69-99 are mapped to 1969-1999,
and values 0–68 are mapped to 2000–2068.
I understand why the function is set up like this but is there a way to work around this? Perhaps with defining your own ranges for 2-digit years?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您总是在生日时使用它,那么如果年份是现在以后的话,只需减去 100:
If you're always using it for birthdays, just subtract 100 if the year is after now:
此函数将年份移至 1950 年:
This function shifts the year to 1950:
如果您预计生日,您总是可以手动修改数据 - 未来的任何日期都会自动回退一个世纪,或类似的情况。
If you're expecting a birthday, you could always just manually massage the data - any date in the future is automatically set back a century, or some such.