博客
关于我
python中获取上一个月一号的方法
阅读量:796 次
发布时间:2023-03-09

本文共 949 字,大约阅读时间需要 3 分钟。

如何快速计算一个月前的第一天

在数据处理领域,生成时间范围内的报表是常见任务。周级别报表通过简单的timedelta(days=7)即可解决,但月级别报表却存在不少挑战。如何准确获取一个月前的第一天,避免跨年或闰年带来的复杂性,这一直是开发者们需要解决的问题。

经过思考,我尝试了两种方法来解决这个问题。

def get_last_month_first_day(date):    date_terminal = 26 + date.day    res_date = date - timedelta(days=date_terminal)    while 1:        if res_date.day == 1:            break        else:            res_date -= timedelta(days=1)    return res_date if name == 'main':test_date_a = date(2016, 9,3)test_date_b = date(2016, 10, 1)test_date_c = date(2016, 2, 28)test_date_d = date(2016, 1, 1)print map(get_last_month_first_day, [test_date_a, test_date_b, test_date_c, test_date_d])

这种方法通过在给定日期的基础上减去一个终止天数(date_terminal),然后逐步向前调整,直到找到一个月的第一天。虽然简单易行,但代码略显冗长,且难以处理闰年等特殊情况。

def get_last_month_first_day_v2(d):    return datetime.date(d.year - (d.month == 1), d.month - 1 if d.month != 1 else 12, 1)

相比之下,这种更简洁的方法通过调整年份和月份,直接计算出目标日期的前一个月的第一天。这种方法逻辑清晰,代码简短,但需要注意月份的边界条件处理。

两种方法各有优劣,选择时可以根据具体需求和项目复杂度来决定。

转载地址:http://etlfk.baihongyu.com/

你可能感兴趣的文章
Python+requests+unittest执行接口自动化测试详情
查看>>
python+requests+unittest执行自动化接口测试!
查看>>
Python+Requests编码识别Bug
查看>>
python函数编写_[零基础学python]传说中的函数编写条规
查看>>
Python+selenium —— UI自动化之鼠标操作
查看>>
python函数注释,参数后面加冒号:,函数后面的箭头→是什么?
查看>>
Python+Selenium+Threading进行兼容性测试
查看>>
Python+selenium+unittest的GUI自动化框架实现
查看>>
python函数拟合不规则曲线_Python计算&绘图——曲线拟合问题(转)
查看>>
python函数定义的基本格式_零基础学python-2.19 定义函数、调用函数与默认参数
查看>>
Python+Selenium之数据驱动测试的实现
查看>>
python函数定义与使用+返回值简解
查看>>
Python+Selenium登录
查看>>
Python日期时间模块
查看>>
Python函数合集:足足68个内置函数请收好!
查看>>
Python+Selenium自动化测试项目实战
查看>>
Python+Selenium自动化测试项目实战【建议收藏】
查看>>
Python+Selenium自动化测试:Page Object模式
查看>>
python+selenium进行cnblog的自动化登录测试
查看>>
Python函数只返回第一个值而不是数据框
查看>>