Python strptime解析没有世纪的年份:在今年之前假设?

Ric*_*ard 10 python datetime

我正在解析Python 2.7中的一些日期时间字符串datetime.strptime.我想假设日期早于现在.

但strptime的%y运算符默认情况下不这样做:

d = '10/12/68'
n = datetime.strptime(d, '%d/%m/%y')
print n
2068-12-10 00:00:00
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让我认为Python 681968常见的吗?

或者我应该只是解析字符串并插入1920手动插入?

shx*_*hx2 8

事实发生后很容易解决:

from datetime import datetime, timedelta
dt = datetime.strptime(...)
if dt > datetime.now():
    dt -= timedelta(years=100)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!“ timedelta”不接受“ years”参数,因此我使用了“ dt-= relativedelta(years = 100)”。所需的导入是“ from dateutil.relativedelta import relativedelta”。 (3认同)

jfs*_*jfs 5

如果您的输入是本地时区:

from datetime import date

then = datetime.strptime('10/12/68', '%d/%m/%y').date()
if date.today() <= then: # *then* must be in the past
    then = then.replace(year=then.year - 100)
Run Code Online (Sandbox Code Playgroud)

应该可以正常工作到2100(不含)。有关日历年算术的更多详细信息,请参见此处。