文章来源:数据分析与统计学之美
作者:黄伟呢
这是群友的一个需求。他想根据一个给定的日期,获取该给定日期在这个年月的最后一天的日期,并且要求在Python中怎么做。基于此,我就想到了对比Excel,在Python中完成这个需求。
![](https://i-blog.csdnimg.cn/blog_migrate/4b9cc072f4cda3ecd93cb11f9c192b9d.png)
Excel完成这个需求
① 在单元格中输入EOMONTH()公式
![](https://i-blog.csdnimg.cn/blog_migrate/6dc21d7eec642b69cdd596df8a2053cf.png)
② 完成填充操作
![](https://i-blog.csdnimg.cn/blog_migrate/de91617b838e101a967e46f70dde2b3e.png)
③ 将时间戳转换为短日期格式
可以看到在excel中输入该公式后,默认返回的是一个时间戳,我们需要将其转换为我我们需要的短日期
格式。
![](https://i-blog.csdnimg.cn/blog_migrate/9e3bea59cc6125220c3d77d88925feef.png)
Python完成这个需求
在完成这个需求之前,我们先来讲述几个知识点,否则你会看着懵逼。
1)datetime库中的知识点
import datetime
date1 = datetime.date.today()
print(date1)
year = datetime.date.today().year
print(year)`
month = datetime.date.today().month
print(month)
结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/aca27c8bbdba77cd71a755dc198129e7.png)
可以看出:上面我们使用today()函数直接获取了当前系统的年月,并且利用year和month属性分别获取了当前系统时间的年、月。
接下来,我们使用该模块获取指定年、月的指定日期
,其中day=1表示获取当前年月的第一天,day=2表示获取当前年月的第二天......依次进行下去。
date1 = datetime.date(year=year, month=month, day=1)
print(date1)
date2 = datetime.date(year=year, month=month, day=2)
print(date2)
结果如下:
通过上述演示,应该可以知道怎么完成这个需求了吧?当我们指定了年月,后面只需要传入day=当月的总天数
这个参数,得到的不就是该年月的最后一天的日期吗?因此目前的问题就是怎么获取某个月的最后一天,这就是下面需要讲述的monthrange()
函数。
2)calendar库中的知识点
对于这个模块,我主要讲述一个monthrange()函数,这个函数是有什么用呢?
monthrange(year, month):返回指定年月,由第一天所在的星期和本月的总天数组成的元组。
# 这里的year和month就是上面提到的2020和7
import calendar
x, y = calendar.monthrange(year, month)
print(x, y)
"""
其中:x表示2020/7/1号所在的星期数,其中周一是0,周二是1,周三是2。
y表示的是2020年7月这个月的总天数。
"""
结果如下:
3)完整代码如下
def func(year=None, month=None):
if year:
year = int(year)
else:
year = datetime.date.today().year
if month:
month = int(month)
else:
month = datetime.date.today().month
# x:表示当月第一天所属的星期
# y:表示当月的总天数
x, y = calendar.monthrange(year, month)
# 获取当月的第一天和最后一天
first_day = datetime.date(year=year, month=month, day=1)
last_day = datetime.date(year=year, month=month, day=y)
return first_day, last_day
first_day, last_day = func()
print(first_day, last_day)
first_day, last_day = func(2020,6)
print(first_day, last_day)
结果如下:这个代码其实很好理解:
如果year和month为空,就返回的是当前系统时间的最后一天的日期。如果传入指定年月,那么获取的就是指定年月的最后一天的日期。
近期推荐阅读:
【1】整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了【2】【终篇】Pandas中文官方文档:基础用法6(含1-5)
如果你觉得文章不错的话,分享、收藏、在看、留言666是对老表的最大支持。