【问题标题】:Generate list of list for start and end date of week from date range从日期范围生成每周开始和结束日期的列表列表
【发布时间】:2019-07-11 17:35:16
【问题描述】:

我正在尝试通过输入开始日期和结束日期来生成周列表。 假设开始日期是 2019-05-01,结束日期是 2019-05-31 那么我想生成一个这样的列表列表

[['2019-04-29','2019-05-05'],['2019-05-06','2019-05-12'],['2019-05-13','2019-05-19'],['2019-05-20','2019-05-26'],['2019-05-27','2019-06-02']]

谢谢。

【问题讨论】:

  • 那些带有04 的日期是像2019-04-13 错别字还是我错过了什么?您的开始日期似乎也早于开始日期。它是如何工作的?
  • 这是一个要求,因为我需要整整一个星期。我需要一周的开始日期,即使它早于开始日期。
  • 我相信您期望的输出应该会略有不同。看我的回答。

标签: python-3.x list


【解决方案1】:

您可以使用 calendar 内置模块 (doc) 来获取周数:

import calendar
from datetime import datetime, timedelta

def get_all_weeks(start_date, end_date):
    start_date = datetime.strptime(start_date, '%Y-%m-%d').date()
    end_date = datetime.strptime(end_date, '%Y-%m-%d').date()
    one_day, one_week = timedelta(days=1), timedelta(days=7)
    current_week_start = calendar.Calendar().monthdatescalendar(start_date.year, start_date.month)[0][0]
    while True:
        if current_week_start + one_week <= start_date:
            current_week_start += one_week
            continue
        if current_week_start > end_date:
            break
        yield [current_week_start.strftime('%Y-%m-%d'), (current_week_start + one_week - one_day).strftime('%Y-%m-%d')]
        current_week_start += one_week

d_start = '2019-05-01'
d_end = '2019-05-31'

weeks = [*get_all_weeks(d_start, d_end)]

from pprint import pprint
pprint(weeks)

打印:

[['2019-04-29', '2019-05-05'],
 ['2019-05-06', '2019-05-12'],
 ['2019-05-13', '2019-05-19'],
 ['2019-05-20', '2019-05-26'],
 ['2019-05-27', '2019-06-02']]

【讨论】:

  • 谢谢,对我很有帮助。
猜你喜欢
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 2022-10-23
相关资源
最近更新 更多