使用 Python 查找本月的最后一天
记住每个月的最后一天并确定这一天可能具有挑战性。 你有没有想过应该有一个计算机程序可以用几行代码向你显示任何一年任何一个月的最后一天?
本文将教我们如何创建 Python 程序,让我们使用标准 Python 库轻松找到该月的最后一天。 我们将使用内置库(如 calendar 和 datetime)以及一些第三方库(如 pandas 和 arrow)在 Python 中查找月份的最后一天。
使用 Python 中的日历库查找月份的最后一天
在本节中,我们将使用内置的 Python 库日历来查找该月的最后一天。
该程序使用日历子函数 monthrange,它接受两个参数参数,年和月,并返回键值对值 (week_day_of_first_day, number_of_days)。
第一个值表示该月的第一个工作日(0 是星期一,6 是星期日),而第二个值表示该月的最后一天。
import calendar
last_day = calendar.monthrange(2000, 1)
print(last_day)
一月有 31 天,在 2000 年,第一天是星期六。
输出:
让我们通过提供一些闰年作为输入来检查程序,看看它是否在 Python 中正确找到了该月的最后一天。
import calendar
last_day1 = calendar.monthrange(2000, 2)
print(last_day1)
last_day2 = calendar.monthrange(2004, 2)
print(last_day2)
闰年将相应显示。
输出:
使用 Python 中的 DateTime 模块查找该月的最后一天
datetime 库也是一个内置库,用于在 Python 中查找该月的最后一天。
从每个月的第一天减去一天以找到该月的最后一天
当月份和年份作为输入提供时,此程序会查找该月的最后一天。
import datetime
year = 2001
month = 2
v = datetime.date(year + int(month / 12), (month % 12) + 1, 1) - datetime.timedelta(days=1)
print(v)
让我们分解一下代码:
第一行导入日期时间库。 创建了两个变量,year 和 month,它们接受年和月的输入。 子函数 datetime.date() 将参数内的三个值作为日期。
该程序使用的逻辑是,从该月的第一天返回前一天会将我们带到上个月的最后一天。 这为我们提供了除 12 月以外所有月份的最后一天,这将我们带到了前一年的最后一天。
该程序使用以下行将 1 加到 12 月的年份以解决此问题:
datetime.date(year + int(month / 12)
类似地,对于月份,如果是 12 月,程序会在月份 %12 的模数上加 1。
这会将月份设置为 1,其天数与 12 相同,但不会更改当前年份。 最后,使用 datetime.timedelta(days=1) 函数从当前日期中减去一天。
输出:
使用 datetime 库执行此操作的另一种方法是创建一个方法并从中返回两个值,一个用于 12 月,另一个用于其余月份。 让我们检查下面的程序。
import datetime
def last_day_of_month(date):
if date.month == 12:
return date.replace(day=31)
return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1)
print(last_day_of_month(datetime.date(2022, 10, 25)))
使用参数日期创建了一个方法 last_day_of_month。 在 if 语句中,使用 date.month == 12
检查月份是否为十二月。
如果条件为真,日期将替换为 date.replace(day=31)
。 否则,通过递增 month=date.month + 1 将日期替换为第一天和下一个月,然后从中减去一天,使日期成为给定月份的最后一天。
下面给出一个例子:
return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1)
最后,通过传递日期 datetime.date()
来调用该方法,然后将其打印出来。 它提供了比前面的示例更直接的解决方案。
输出:
2022-10-31
使用存储在数组中的预加载日期使用 for 循环查找该月的最后一天
另一个使用 datetime 库的例子是创建一个包含该月最后几天的数组,循环运行它,然后让 datetime 库过滤掉无效的日期。
请参阅下面的示例代码。
from datetime import datetime
def find_last_day(year, month):
end_days = [31, 30, 29, 28, 27]
for i in end_days:
try:
date = datetime(year, month, i)
except ValueError:
continue
else:
return date.date()
return None
print(find_last_day(2020, 2))
该程序使用带有两个参数的方法 find_last_day()
,年和月。 在数组 end_days 中,存储了可能的最后几天。
创建一个 for 循环,运行 end_days 中的元素数。 在 try 块内,变量使用 datetime() 子函数存储日期。
月和年的值根据参数设置,日值中存储i。
在 except 块内,给出了 ValueError 的条件,它丢弃变量 date 中的 i 值以获得无效的月份值。 然后使用 continue 重新运行循环。
如果找到有效值,该方法会在 else 块中返回日期。 最后,使用 return None 使该方法不返回任何其他值。
该程序从给定的数组中搜索适当的日期值。 对于 December,循环找到 31 并返回值; 对于像 11 月这样的月份,只有 30 是可能的,所以它会在那天返回。
同样,2 月 31 日和 30 日也是不可能的,因此循环遍历它们。 如果给定的年份是闰年,则循环返回 29; 否则,返回 28。
最后,通过传递二月份和 2020 年来调用该方法。
输出:
2020-02-29
正如我们所见,2020 年 2 月是闰年。
打印日历年所有月份的最后一天以查找该月的最后一天
库 datetime 也可用于在 Python 中查找日历年中所有月份的最后一天并将它们全部打印出来。 让我们看一下程序。
import datetime
def month_end(date):
next_month = date.replace(day=28) + datetime.timedelta(days=4)
return next_month - datetime.timedelta(days=next_month.day)
for month in range(1, 13):
print(month_end(datetime.date(2022, month, 1)))
让我们分解一下代码:
创建了一个带有参数日期的方法 month_end。 在此方法中,变量 next_month 获取日期并使用 date.replace(day=28) 将日期替换为 28,因为每个月最少有 28 天。
替换值后,将向该值添加 4 天以将日期移动到下个月的第一天或第二天,具体取决于上个月的天数。
假设当前日期是 2000, 3, 4,这个月的日期值是 4。从日期中减去这一天的值将得到上个月的最后一天 - 2000, 2, 28; 该程序中使用了此逻辑。
变量 next_month 中的日期从其自身中减去,并使用以下语法从方法中返回:
return next_month - datetime.timedelta(days=next_month.day)
我们创建了一个 for 循环,它使用实例月份在 (1,13) 的范围内运行循环。 在循环内,方法 month_end 通过传递 datetime.date 来调用,为该方法提供年和日。
月份被替换为在 for 循环中使用的实例月份,以将 12 个月传递给该方法。
for month in range(1, 13):
print(month_end(datetime.date(2022, month, 1)))
输出:
2022-01-31
2022-02-28
2022-03-31
2022-04-30
2022-05-31
2022-06-30
2022-07-31
2022-08-31
2022-09-30
2022-10-31
2022-11-30
2022-12-31
输出中显示的是日历年的所有最后几天。
使用 Arrow 库查找该月的最后一天
这是一个可用于日期操作的第三方 Python 库。 它将用于在 Python 中查找该月的最后一天。
该程序使用 Arrow 子函数 utcnow() 获取当前世界时。 它使用 ceil('month').date
查找月份的上限。
import arrow
print(arrow.utcnow().ceil('month').date())
输出:
2022-10-31
该代码给出了当月的最后一个日期。
使用 Pandas 模块查找本月的最后一天
本节使用第三方 Python 库 Pandas 来查找该月的最后一天。 在这里,程序导入了两个库包——datetime 和 pandas。
创建一个方法 check_month_end 接受一个参数日期。 此方法采用参数 date 并使用 date + pd.offsets.MonthEnd(0)
添加该月的剩余天数。
下面是示例代码:
from datetime import datetime
import pandas as pd
def check_month_end(date):
return date + pd.offsets.MonthEnd(0)
print(check_month_end(datetime(2005, 2, 6)))
print(check_month_end(datetime(2004, 2, 29)))
输出
2005-02-28 00:00:00
2004-02-29 00:00:00
输出采用 Pandas 时间戳格式,并显示该月的最后一天。
使用 Pandas 检查某一天是否是该月的最后一天
Pandas 可用于检查给定日期是否是该月的最后一天。 与之前的几个程序不同,这个程序接受用户输入并检查给定日期是否有效。
该程序使用参数值来检查它是否匹配使用 date + pd.offsets.MonthEnd(0) == date
的月末。 该方法在被调用时返回布尔值。
请参阅提供的示例代码。
from datetime import datetime
import pandas as pd
def check_month_end(date):
return date + pd.offsets.MonthEnd(0) == date
print(check_month_end(datetime(1996, 5, 16)))
print(check_month_end(datetime(1996, 5, 31)))
输出:
False
True
总结
在本文中,我们学习了使用 datetime 和 calendar 等内置库以及 arrow 和 pandas 等第三方库在 Python 中查找月份最后一天的各种方法。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。