使用 Python 查找本月的最后一天

news2024/9/24 7:22:07

文章目录

    • 使用 Python 中的日历库查找月份的最后一天
    • 使用 Python 中的 DateTime 模块查找该月的最后一天
      • 从每个月的第一天减去一天以找到该月的最后一天
      • 使用存储在数组中的预加载日期使用 for 循环查找该月的最后一天
      • 打印日历年所有月份的最后一天以查找该月的最后一天
    • 使用 Arrow 库查找该月的最后一天
    • 使用 Pandas 模块查找本月的最后一天
      • 使用 Pandas 检查某一天是否是该月的最后一天
    • 总结


记住每个月的最后一天并确定这一天可能具有挑战性。 你有没有想过应该有一个计算机程序可以用几行代码向你显示任何一年任何一个月的最后一天?

本文将教我们如何创建 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 中的日历库查找月份的最后一天

让我们通过提供一些闰年作为输入来检查程序,看看它是否在 Python 中正确找到了该月的最后一天。

import calendar

last_day1 = calendar.monthrange(2000, 2)
print(last_day1)

last_day2 = calendar.monthrange(2004, 2)
print(last_day2)

闰年将相应显示。

输出:

在 Python 中正确找到了该月的最后一天


使用 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 中查找月份最后一天的各种方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/498536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka生产者原理

消息发送流程介绍 Producer创建时,会创建⼀个sender线程并设置为守护线程。⽣产消息时,内部其实是异步的;⽣产的消息先经过拦截器->序列化器->分区器,然后将消息缓存在缓冲区(该缓冲区也是在Producer创建时创建…

关于clash退出后,华硕电脑连不上网了

关于clash退出后,华硕电脑连不上网了 问题记录 问题记录 昨天因为overleaf老断网,然后我就挂了一下clash(第一次用,不怎么懂),后来直接关闭退出了。 今天早上突然浏览器的网页(微软自带、华硕…

挑战14天学完Python----初识Python语法

往期文章 Java继承与组合 你知道为什么会划分数据类型吗?—JAVA数据类型与变量 10 > 20 && 10 / 0 0等于串联小灯泡?—JAVA运算符 你真的知道怎样用java敲出Hello World吗?—初识JAVA 目录 往期文章前言1.温度转换实例2. 程序格式框架2.1 高…

ATT汇编快速学习

说明 文档来源 https://flint.cs.yale.edu/cs421/papers/x86-asm/asm.html 使用AT&T语法; 原文档是intel语法翻译过来的; 内容 基于32位, x86的硬件环境; 指令仅仅介绍常用, 即还有很大一部分的指令并没有支持; 编译器(汇编器) GAS(GNU assembler: 即gnu组织提供; 使…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 5 Link Analysis

来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 5 Link Analysis Terms: words or other strings of characters other than white space. An inverted index is a data structure that makes it easy, given a term, to find (pointers to) a…

【数码】收音机,德生PL380使用教程与注意事项

文章目录 1、主界面功能介绍(注意闹钟和自动关机)2、电池和电池模式的匹配3、收音机天线与信号,耳机与噪音F、参考资料 1、主界面功能介绍(注意闹钟和自动关机) 红色的按钮:power 按一下开机,按…

DJYOS开源往事一:djyos爱好者大南山相聚写实

前言:DJYOS开源社区成立于2009年,后因为专注技术方向和垂直产业化等原因,2015年后关闭开源社区。斗转星移,DJYOS开源社区虽然关闭,但是DJYOS开源和精神依然在,转眼DJYOS发布十四年了。记录一下DJYOS开源往事…

Qt Plugin插件开发

一、Qt 插件机制 .1 Qt 插件简介 插件是一种遵循一定规范的应用程序接口编写出来的程序,定位于开发实现应用软件平台不具备的功能的程序。插件与宿主程序之间通过接口联系,就像硬件插卡一样,可以被随时删除,插入和修改&#xff…

2.2.4 Linux安装模式下,磁盘分区的选择(重要)

目录树结构 (directory tree) 整个Linux系统最重要的地方就是在于目录树架构。 所谓的目录树架构(directory tree)就是以根目录为主,然后向下呈现分支状的目录结构的一种文件架构。 所以,整个目录树架构最重…

Midjourney-Discord入门+高手指引手册

上一篇我们说了如何注册和订阅,今天我们来讲一讲相关的细节,首先我们来一个概览图,先有个大致的印象。 概览图 生成的四张图片,类似于Demo,从左至右,从上至下,1,2,3,4放大按钮U1,U2…

【旋转编码器如何工作以及如何将其与Arduino一起使用】

在本教程中,我们将学习旋转编码器的工作原理以及如何将其与Arduino一起使用。您可以观看以下视频或阅读下面的书面教程。 1. 概述 旋转编码器是一种位置传感器,用于确定旋转轴的角度位置。它根据旋转运动产生模拟或数字电信号。 有许多不同类型的旋转编码器按输出信号或传感…

三个令人惊艳超有用的 ChatGPT 项目,开源了!

自 3 月初 Open AI 开放 ChatGPT API 以来,GitHub 上诞生的开源项目数量之多,着实多得让我眼花缭乱、应接不暇。 今天,我将着重挑选几个对日常工作、生活、学习帮助较大的 ChatGPT 开源项目,跟大家分享下,希望对你有所…

Illustrator如何使用填充与线条之实例演示?

文章目录 0.引言1.绘制星空小插画2.制作清新小碎花壁纸3.双重描边文字 0.引言 因科研等多场景需要进行绘图处理,笔者对Illustrator进行了学习,本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结,本文对…

labelme标注数据集,并利用paddleseg完成标注数据的准备工作

1、安装labelme 1、创建labelme虚拟环境 先检查python的版本 python -V使用命令 conda create -n labelme python=3.9,创建虚拟环境 2、激活虚拟环境 conda activate labelme3、安装labelme pip install labelme2、labelme的使用 1、打开cmd输入命令 labelme2、进入label…

关于安装Node/Yarn/Electron过程中遇到的问题

目录 1、安装Node2、安装electron很慢3、PowerShell中无法使用yarn命令4、Yarn命令目录bin与其全局安装位置不在同一个文件夹 1、安装Node 【参考文章】Node.js下载安装及环境配置教程 2、安装electron很慢 npm config set electron_mirror https://npm.taobao.org/mirrors/…

Java日志详解

文章目录 1.日志的概述1.1 日志文件1.1.1 调试日志1.1.2 系统日志 1.2 JAVA日志框架1.2.1 为什么要用日志框架1.2.2 日志框架和日志门面 2.JUL2.1 JUL简介2.2 JUL组件介绍2.3 JUL的基本使用2.3.1 日志输出的级别2.3.2 日志的输出方式2.3.3 自定义日志的级别2.3.4 将日志输出到具…

20个最流行的3D打印机切片软件

3D 打印切片机(Slicer)通过生成 G 代码为你的 3D 打印机准备 3D 模型,G 代码是一种广泛使用的数控 (NC) 编程语言。 3D打印切片软件的选择范围很广。 因此,为了帮助你找到最合适的工具,本文列出了20个顶级 3D 打印切片…

2022年NOC大赛编程马拉松赛道决赛图形化高年级A卷-正式卷

2022年NOC大赛编程马拉松赛道决赛图形化高年级A卷-正式卷 2022NOC-图形化决赛高年级A卷正式卷 编程题:蓝色星球的绿色踪迹任务描述:有一颗蔚蓝色的星球,她就是我们人类赖以生存的家园——地球。地球是人类的母亲,她为我们提供了各…

第三十七章 Unity GUI系统(上)

Unity 提供了三个 UI 系统帮助我们创建游戏界面 (UI): 第一,UI 工具包 第二,Unity UI 软件包 (UGUI) 第三,IMGUI UI 工具包是 Unity 中最新的 UI 系统。它旨在优化跨平台的性能,并基于标准 Web 技术。您可以使用 U…

并发编程04:LockSupport与线程中断

文章目录 4.1 线程中断机制4.1.1 从阿里蚂蚁金服面试题讲起4.1.2 什么是中断机制4.1.3 中断的相关API方法之三大方法说明4.1.4 大厂面试题中断机制考点4.1.5 总结 4.2 LockSupport是什么4.3 线程等待唤醒机制4.3.1 三种让线程等待和唤醒的方法4.3.2 Object类中的wait和notify方…