【问题标题】:How to get Sundays of last 90 days (3 months) from current date using datetime in Python如何在 Python 中使用 datetime 从当前日期获取最近 90 天(3 个月)的星期日
【发布时间】:2019-08-26 16:06:09
【问题描述】:

我正在尝试使用日期时间从 python 中的当前日期获取最近 90 天(星期日 3 个月星期日)的日期。我可以在周日获得最后 3 个月,但不能从当前日期开始。使用此代码,我将获取当前月份和过去 2 个月(共 3 个月)的星期日列表。

from datetime import date, timedelta, datetime

def list_sunday(year, month, day):
  try:
    for i in range(1,4):
        d = date(year, month, day)
        d += timedelta(days = 6 -d.weekday())
        while d.month==month:
            yield d
            d += timedelta(days =+ 7)

        if month > 1:
            month = month - 1
        else:
            month = 12
            year = year - 1

        i+=1
  except Exception as e:
    log.error("XXX %s" % str(e))

for d in list_sunday(2019, 4, 05):
    print d

使用上面的代码,我得到了这个

2019-04-07
2019-04-14
2019-04-21
2019-04-28
2019-03-10
2019-03-17
2019-03-24
2019-03-31
2019-02-10
2019-02-17
2019-02-24

这就是我想要得到的,

2019-03-10
2019-03-17
2019-03-24
2019-03-31
2019-02-10
2019-02-17
2019-02-24
2019-01-06
2019-01-13
2019-01-20
2019-01-27

有人可以帮忙吗?

【问题讨论】:

    标签: python datetime calendar


    【解决方案1】:

    这可能会根据您的草稿为您提供更好的方法。有关如何了解更多信息的更多信息。请关注下link

    from datetime import date, timedelta
    
    def all_sundays(year):
    # January 1st of the given year
        dt = date(year, 1, 1)
    # First Sunday of the given year       
        dt += timedelta(days = 6 - dt.weekday())  
        while dt.year == year:
            yield dt
            dt += timedelta(days = 7)
    
    for s in all_sundays(2020):
    print(s)
    

    输出

    2020-01-05
    2020-01-12
    2020-01-19
    2020-01-26
    2020-02-02

    2020-12-06
    2020-12-13
    2020-12-20
    2020-12-27

    【讨论】:

      【解决方案2】:
      from datetime import date, timedelta
      from pprint import pprint
      
      def is_sunday(day):
          return day.weekday() == 6
      
      def sundays_within_last_x_days(num_days = 90):
          result = []
          end_date = date.today()
          start_date = end_date - timedelta(days = num_days)
      
          while start_date <= end_date:
              if is_sunday(start_date):
                  result.append(start_date)
              start_date += timedelta(days = 1)
      
          return result
      
      if __name__ == "__main__":
          dates = sundays_within_last_x_days(30)
          pprint(dates)
      
      

      资源

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-25
        • 2021-10-20
        • 2016-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-15
        • 1970-01-01
        相关资源
        最近更新 更多