Python中如何使用While循环生成从当日到月初的日期列表
Python获取当月首日到当日日期列表的问题修复
代码错误原因
datetime属于Python中的不可变类型,replace()方法不会修改原对象,只会返回修改后的新实例,你原代码没有接收replace()的返回值,每次追加到列表的都是最开始的原始日期对象,所以所有输出日期完全相同- 原代码的循环逻辑会遗漏当日和当月1号两个日期,最终生成的列表缺少首尾两个值
- 额外优化点:不需要把日期转成字符串取天再转整型,直接调用
datetime对象的day属性就能拿到当日天数,效率更高也更简洁
原代码修复版
from datetime import datetime dateIs = datetime.today() thisDayInt = dateIs.day dateListTest = [] while thisDayInt >= 1: # 接收replace返回的新日期对象 modified_date = dateIs.replace(day=thisDayInt, hour=0, minute=0, second=0, microsecond=0) dateListTest.append(modified_date) thisDayInt -= 1 print(dateListTest)
更简便的实现方案
使用列表推导式可以直接生成目标列表,代码更简洁易读:
from datetime import datetime today = datetime.today() # 从当日天数倒序遍历到1,直接生成日期列表 date_list = [today.replace(day=d, hour=0, minute=0, second=0, microsecond=0) for d in range(today.day, 0, -1)] # 如果需要字符串格式的日期,可额外转换 date_str_list = [item.strftime("%Y-%m-%d") for item in date_list] print(date_str_list)
内容的提问来源于stack exchange,提问作者Elfo
相关产品推荐
相关产品推荐

