【问题标题】:python get same day last yearpython在去年同一天
【发布时间】:2020-08-20 21:50:43
【问题描述】:

如何在 python 中获取去年的同一天

我尝试了datetime.datetime.now() - relativedelta(years=1),但这并没有产生我正在寻找的结果。

谁能帮忙。谢谢

示例:

20/08/2020(星期四)去年是22/08/2019(星期四)

【问题讨论】:

  • 忽略闰年,不就是datetime.datetime.now() - datetime.timedelta(days=365)吗?
  • 所以你真的在问“我如何找到一年中的第 N 天”?
  • 您需要备份 52 周,而不是 1 年。
  • 不是每年都有 52 周!请参阅下面的答案

标签: python datetime


【解决方案1】:

Pranav Hosangadi 的回答非常好,但请注意,并非每年都有 52 周!它也可能是 53,如果您遵循 ISO8601 week numbering standard.

一年中的 ISO 周数可能会得到according to this Stack Overflow thread,从而产生您的代码:

print(datetime.datetime.now())
2020-08-20 22:57:28.061648
 
def lastweeknumberoflastyear():
    return datetime.date(datetime.datetime.now().year-1, 12, 28).isocalendar()[1]

print(datetime.datetime.now() - datetime.timedelta(weeks=lastweeknumberoflastyear()))
2019-08-22 22:57:28.061785

【讨论】:

    【解决方案2】:

    您想要一年前一周的同一天。一年有52周

    print(datetime.datetime.now())
    2020-08-20 17:56:56.397626
    
    print(datetime.datetime.now() - datetime.timedelta(weeks=52))
    2019-08-22 17:56:56.397626
    

    【讨论】:

    • 尽管此答案已被标记为已接受,因为它在大多数情况下都适用于您,但您可能会对某些年份的开始/结束感到非常惊讶,因为此解决方案不符合 ISO 8601 标准。在下面查看我的其他答案...
    • 这有多简单,尝试了很多解决方案,包括 relativetimedelta,但对我也不起作用,现在我明白这有多简单了。谢谢。
    【解决方案3】:

    你可以这样做:

    now = datetime.datetime.now()
    last_year = now.replace(now.year - 1)
    

    请注意,这不会考虑闰年。如果您想找到正好 365 天前的日期,您可以这样做:

    now = datetime.datetime.now()
    last_year = now - datetime.timedelta(days=365)
    

    【讨论】:

      【解决方案4】:

      我可能会这样做,因为一年并不总是 365 天。

      from datetime import datetime
      x = datetime.now()
      last_year = datetime(x.year-1,x.month,x.day,x.hour,x.minute,x.second,x.microsecond)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-24
        • 1970-01-01
        • 1970-01-01
        • 2012-01-24
        • 2015-07-09
        • 1970-01-01
        相关资源
        最近更新 更多