如何用Python根据2024年周列表提取对应日期(周起始为周二)
自定义周二周起始的2024年周日期提取实现
核心思路
已知2024年1月2日是第一个有效数据的周二(对应wk=2),后续每周以周二为起始,间隔7天。我们可以基于这个基准日期,通过日期偏移计算每个周数对应的起始日期和日期范围。
代码实现(Python)
import datetime def format_date(date_obj, full_format=True): """格式化日期,处理前导零,支持完整格式和短格式""" if full_format: formatted = date_obj.strftime('%b %d, %Y') else: formatted = date_obj.strftime('%b %d') # 去除日期的前导零(如"Jan 02"改为"Jan 2") return formatted.replace(' 0', ' ') # 基础参数 base_start = datetime.date(2024, 1, 2) # 第一个有效周的起始周二 wks = list(range(2, 19)) # 输入的周列表:2到18 # 生成每周起始日期列表 wk_starting wk_starting = [format_date(base_start + datetime.timedelta(weeks=(wk - 2))) for wk in wks] # 生成每周日期范围列表 wk_composed_of wk_composed_of = [] for wk in wks: current_start = base_start + datetime.timedelta(weeks=(wk - 2)) current_end = current_start + datetime.timedelta(days=6) # 一周7天:周二到下周一 start_short = format_date(current_start, full_format=False) end_short = format_date(current_end, full_format=False) # 处理同月份省略重复月份的情况 if current_start.month == current_end.month: # 拆分出月份和日期,只保留一次月份 month_part, start_day = start_short.split(' ') range_str = f"{month_part} {start_day} - {end_short.split(' ')[1]}" else: range_str = f"{start_short} - {end_short}" wk_composed_of.append(range_str) # 输出示例 print("wk_starting:", wk_starting[:3]) print("wk_composed_of:", wk_composed_of[:3])
代码说明
- 日期格式化函数:统一处理日期的前导零问题,同时支持完整日期格式(如
Jan 2, 2024)和短格式(如Jan 2)。 - 基准日期偏移:每个周数
wk对应的起始日期 = 基准日期 + (wk-2)*7天,因为wk=2对应基准日期本身。 - 日期范围生成:每周结束日期为起始日期加6天(覆盖周二到下周一共7天),并根据是否跨月决定是否重复显示月份,匹配需求中的格式(如
Jan 2 - 8、Jan 29 - Feb 4)。
输出示例
运行代码后,前3组结果如下:
wk_starting: ['Jan 2, 2024', 'Jan 9, 2024', 'Jan 16, 2024'] wk_composed_of: ['Jan 2 - 8', 'Jan 9 - 15', 'Jan 16 - 22']
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

