对比Excel,怎么用Python获取指定月最后一天的日期

 对比Excel,怎么用Python获取指定月最后一天的日期

这是群友的一个需求。他想根据一个给定的日期,获取该给定日期在这个年月的最后一天的日期,并且要求在Python中怎么做。基于此,我就想到了对比Excel,在Python中完成这个需求。

对比Excel,怎么用Python获取指定月最后一天的日期

Excel完成这个需求

① 在单元格中输入EOMONTH()公式

对比Excel,怎么用Python获取指定月最后一天的日期

② 完成填充操作

对比Excel,怎么用Python获取指定月最后一天的日期

③ 将时间戳转换为短日期格式

可以看到在excel中输入该公式后,默认返回的是一个时间戳,我们需要将其转换为我我们需要的短日期格式。

对比Excel,怎么用Python获取指定月最后一天的日期

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) 

结果如下:

对比Excel,怎么用Python获取指定月最后一天的日期

可以看出:上面我们使用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) 

结果如下:

对比Excel,怎么用Python获取指定月最后一天的日期

通过上述演示,应该可以知道怎么完成这个需求了吧?当我们指定了年月,后面只需要传入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月这个月的总天数。 
""" 

结果如下:

对比Excel,怎么用Python获取指定月最后一天的日期

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) 

结果如下: