【问题标题】:Know the exactly date of N years ago知道N年前的确切日期
【发布时间】:2015-05-28 17:48:24
【问题描述】:

我有这个关于 python 日期的请求... 我想知道 N_YEARS 前的确切日期。 所以,我尝试了这个简单的代码:

years_count = N_YEARS * 365
today = datetime.datetime.today()
birthday_date = today + datetime.timedelta(days=-years_count)

但这是不正确的。 示例:

Today: 28/05/2015 (DD/MM/YYYY)
N_YEARS: 18
Result: 1997-06-01 (YYYY/MM/DD) **17 Years, 11 Months e 27 Days**

timedelta 函数正确 by 不正确以这种方式计算天数:N_YEARS * 365 我该如何解决?

【问题讨论】:

  • N_YEARS * 365 确实不正确。听说过闰年吗?
  • 一年不是一个精确的单位。有些年份有 365 天,有些年份有 366 天。
  • 这取决于您所说的恰好 N 年是什么意思。我想说从你的日期减去 N 年。 1000 年 等于 365000 天!更像 365260,但要复杂得多。

标签: python python-datetime


【解决方案1】:

使用replace:

today = today.replace(year = today.year - N_YEARS)

编辑:请注意,如果 today 是 2 月 29 日并且结果年份不是闰年,则会引发错误:

>>> a = datetime.datetime(2012, 2, 29)
>>> a.replace(year=a.year - 10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: day is out of range for month

【讨论】:

  • 您的回答是否与闰年兼容?用 today.year - N_YEARS 替换年份是否正确?例如……如果我的生日是 1970 年 2 月 28 日?
  • 我尝试使用 yrs_ago_date = datetime.datetime.today() - relativedelta(years=N_YEARS) 日期计算正确...您对此有何看法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多