Python:获取'3年前的'日期时间'

AP2*_*257 46 python datetime timedelta

在Python中,如何获取"3年前的今天"的datetime对象?

更新:FWIW,我不太关心准确性......也就是今天2月29日,我不在乎我是在2月28日还是3月1日给我答案.在这种情况下,简洁比可配置性更重要.

Vin*_*cer 115

如果您需要准确使用dateutil模块来计算相对日期

from datetime import datetime
from dateutil.relativedelta import relativedelta

three_yrs_ago = datetime.now() - relativedelta(years=3)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的准确性.尽管OP不关心准确性,但其他人可能会这样做. (5认同)

Fáb*_*niz 65

import datetime
datetime.datetime.now() - datetime.timedelta(days=3*365)
Run Code Online (Sandbox Code Playgroud)

  • AP257说:"我不太关心准确性".我解释为"我不关心闰年" (37认同)
  • (-1)这显然是错误的,因为它没有处理闰年. (26认同)
  • +1为简单起见.也许OP只是想要一个如何做这样的事情的例子. (7认同)
  • 当提问者明确告诉相反的情况时,给出一个不那么简洁但更准确的答案是否正确? (4认同)
  • @Diniz:您将其解释为“我想错了”。正确地做到这一点是如此容易,错误地做起来很愚蠢-当有正确答案时接受这个答案是很奇怪的。 (3认同)

Gle*_*ard 21

减去365*3天当然是错误的 - 你跨越闰年超过一半的时间.

dt = datetime.now()
dt = dt.replace(year=dt.year-3)
# datetime.datetime(2008, 3, 1, 13, 2, 36, 274276)
Run Code Online (Sandbox Code Playgroud)

ED:为了使闰年问题正确,

def subtract_years(dt, years):
    try:
        dt = dt.replace(year=dt.year-years)
    except ValueError:
        dt = dt.replace(year=dt.year-years, day=dt.day-1)
    return dt
Run Code Online (Sandbox Code Playgroud)