一个好用的 Python 日期库 -- pendulum

Python日期和时间处理库之pendulum使用详解 在处理日期和时间时,Python 标准库中的datetime模块虽然功能强大,但有时显得过于复杂且缺乏一些便捷功能。为了解决这些问题,Pendulum 库应运而生。Pendulum 是一个 Python 日期和时间处理库,它在datetime模块的基础上进行了扩展,提供了更加友好的 API 和更多的功能。本文将详细介绍 Pendulum 库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。 阅读详情

关于日期处理,Python 提供了很多的库,比如标准库 datetime、第三方库 dateutil、arrow 等等。这里介绍一个我个人最喜欢的库 pendulum,用起来可以说非常的方便,任何对日期的操作它都能满足。

在使用之前需要先安装,直接 pip install pendulum 即可。

下面来看一下用法,首先是 datetime, date, time 的创建。

import pendulum

dt = pendulum.datetime(
    2022, 3, 28, 20, 10, 30)
print(dt.__class__)
print(dt)
"""
<class 'pendulum.datetime.DateTime'>
2022-03-28T20:10:30+00:00
"""
# 创建的对象是 DateTime 类型
# 并且带有时区,默认是 UTC
# 我们可以换一个时区
dt = pendulum.datetime(
    2022, 3, 28, 20, 10, 30, tz="Asia/Shanghai")
print(dt)
"""
2022-03-28T20:10:30+08:00
"""

# 如果不想要时区,那么指定 tz=None
dt = pendulum.datetime(
    2022, 3, 28, 20, 10, 30, tz=None)
print(dt)
"""
2022-03-28T20:10:30
"""

# 然后是 date 的创建
d = pendulum.date(2022, 3, 28)
print(d.__class__)
print(d)
"""
<class 'pendulum.date.Date'>
2022-03-28
"""

# time 的创建
t = pendulum.time(20, 10, 30)
print(t.__class__)
print(t)
"""
<class 'pendulum.time.Time'>
20:10:30
"""

如果创建 datetime 时,时区默认是 UTC。如果不想要时区,或者希望时区是本地时区,那么 pendulum 还专门提供了两个方法。

import pendulum

# 创建 datetime 时设置为本地时区
# 还是调用了 pendulum.datetime 函数
# 但是 tz 被设置成了 pendulum.local_timezone()
dt = pendulum.local(
    2022, 3, 28, 20, 10, 30)
print(dt)
"""
2022-03-28T20:10:30+08:00
"""
print(pendulum.local_timezone())
"""
Timezone('Asia/Shanghai')
"""

# 创建 datetime 时不设置时区
# 内部也是调用了 pendulum.datetime 函数
# 但是 tz 为 None
dt = pendulum.naive(2022, 3, 28, 20, 10, 30)
print(dt)
"""
2022-03-28T20:10:30
"""

然后 pendulum 还提供了几个方法,比如创建当前的 datetime,date 等等。

import pendulum

# 创建当前的 datetime
# 默认是本地时区,但时区可以指定
dt = pendulum.now()
print(dt)
"""
2022-05-29T20:40:49.632182+08:00
"""

# 创建当前的 date,但返回的仍是 datetime
# 只不过时分秒均为 0,同样可以指定时区
dt = pendulum.today()
print(dt)
"""
2022-05-29T00:00:00+08:00
"""

# 获取明天对应的 date
# 返回的是 datetime,时分秒为 0
# 时区可以指定,默认是本地时区
dt = pendulum.tomorrow()
print(dt)
"""
2022-05-30T00:00:00+08:00
"""

# 获取昨天对应的 date
dt = pendulum.yesterday()
print(dt)
"""
2022-05-28T00:00:00+08:00
"""

我们还可以根据时间戳或者字符串来创建:

import pendulum

# 根据时间戳创建
dt1 = pendulum.from_timestamp(1653828466)
dt2 = pendulum.from_timestamp(1653828466,
                              tz=pendulum.local_timezone())
print(dt1)
print(dt2)
"""
2022-05-29T12:47:46+00:00
2022-05-29T20:47:46+08:00
"""

# 根据字符串创建
dt1 = pendulum.parse("2020-05-03 12:11:33")
dt2 = pendulum.parse("2020-05-03 12:11:33",
                     tz=pendulum.local_timezone())
print(dt1)
print(dt2)
"""
2020-05-03T12:11:33+00:00
2020-05-03T12:11:33+08:00
"""

datetime、date、time 的创建我们说完了,然后再来看看它们支持的操作,这也是最核心的部分。

datetime 相关操作

操作非常多,我们逐一介绍。

import pendulum

dt = pendulum.local(
    2022, 3, 28, 20, 10, 30)

# 获取 date 部分和 time 部分
print(dt.date())
print(dt.time())
"""
2022-03-28
20:10:30
"""

# 替换掉 dt 的某部分,返回新的 datetime
# 年月日时分秒、以及时区都可以替换
print(dt.replace(year=9999))
"""
9999-03-28T20:10:30+08:00
"""

# 转成时间戳
print(dt.timestamp())
"""
1648469430.0
"""

# 返回年、月、日、时、分、秒、时区
print(dt.year, dt.month, dt.day)
print(dt.hour, dt.minute, dt.second)
print(dt.tz)
"""
2022 3 28
20 10 30
Timezone('Asia/Shanghai')
"""

然后是生成字符串,pendulum.DateTime 对象可以转成各种格式的日期字符串。

import pendulum

dt = pendulum.local(
    2022, 3, 28, 20, 10, 30)

# 下面四个最为常用
print("datetime:", dt.to_datetime_string())
print("date:", dt.to_date_string())
print("time:", dt.to_time_string())
print("iso8601:", dt.to_iso8601_string())
"""
datetime: 2022-03-28 20:10:30
date: 2022-03-28
time: 20:10:30
iso8601: 2022-03-28T20:10:30+08:00
"""
# 当然还支持很多其它格式,不过用的不多
# 随便挑几个吧
print("atom:", dt.to_atom_string())
print("rss:", dt.to_rss_string())
print("w3c:", dt.to_w3c_string())
print("cookie:", dt.to_cookie_string())
print("rfc822:", dt.to_rfc822_string())
"""
atom: 2022-03-28T20:10:30+08:00
rss: Mon, 28 Mar 2022 20:10:30 +0800
w3c: 2022-03-28T20:10:30+08:00
rfc822: Mon, 28 Mar 22 20:10:30 +0800
"""

我们有时也需要判断当前日期是星期几、在当前这一年是第几天等等,pendulum 也已经帮我们封装好了。

import pendulum

dt = pendulum.local(
    2022, 3, 28, 20, 10, 30)

# 返回星期几
# 注意:星期一到星期天分别对应 1 到 7
print(dt.isoweekday())  # 1

# 返回一年当中的第几天
# 范围是 1 到 366
print(dt.day_of_year)  # 87

# 返回一个月当中的第几天
print(dt.days_in_month)  # 31

# 返回一个月当中的第几周
print(dt.week_of_month)  # 5

# 返回一年当中的第几周
print(dt.week_of_year)  # 13

# 是否是闰年
print(dt.is_leap_year())  # False

最后就是日期的运算,这是 pendulum 最为强大的地方,至于为什么强大,我们演示一下就知道了。

import pendulum

dt = pendulum.local(
    2022, 3, 30, 20, 10, 30)

# 返回下一个月的今天
print(dt.add(months=1))
"""
2022-04-30T20:10:30+08:00
"""

# 返回上一个月的今天
# 但是上一个月是 2 月,并且是平年
# 所以最多 28 天
print(dt.add(months=-1))
"""
2022-02-28T20:10:30+08:00
"""
# 我们看到处理的非常完美
# 该方法的原型如下,年月日时分秒都是支持的,当然还有星期也支持
"""
def add(
    self,
    years=0,
    months=0,
    weeks=0,
    days=0,
    hours=0,
    minutes=0,
    seconds=0,
    microseconds=0,
):
"""

像 Python 的内置模块 datetime 在将日期相加的时候,最多支持到天,我们无法计算下一周、下一个月、下一年的日期。而 pendulum 则可以很方便地处理,这也是我最喜欢的一点。

当然啦,add 里面的值为正,相当于日期往后退;值为负,相当于日期往前推。

然后是两个日期还可以做减法:

import pendulum

dt1 = pendulum.local(
    2021, 1, 20, 11, 22, 33)

dt2 = pendulum.local(
    2022, 3, 30, 20, 10, 30)

period = dt2 - dt1
# 返回的是 Period 对象
# 相当于 datetime 模块里面的 timedelta
print(period.__class__)
"""
<class 'pendulum.period.Period'>
"""

# 但是功能方面,Period 要强大很多
# 两者差了多少年
print(period.in_years())  # 1
# 两者差了多少个月
print(period.in_months())  # 14
# 两者差了多少个星期
print(period.in_weeks())  # 62
# 两者差了多少天
print(period.in_days())  # 434
# 两者差了多少个小时
print(period.in_hours())  # 10424
# 两者差了多少分钟
print(period.in_minutes())  # 625487
# 两者差了多少秒
print(period.in_seconds())  # 37529277

功能非常强大,Python 的 datetime 模块里面的 timedelta 最多只能计算两个日期差了多少天,而这里年月日时分秒均可。

以上就是本文的内容,当然 pendulum 的功能其实不止我们上面说的那些,有兴趣的话可以参考官网,但常用的差不多就这些东西。

以上就是本次分享的所有内容,如果你觉得文章还不错,欢迎关注公众号:Python编程学习圈,每日干货分享,发送“J”还可领取大量学习资料,内容覆盖Python电子书、教程、数据库编程、Django,爬虫,云计算等等。或是前往编程学习网,了解更多编程技术知识。

Pendulum详解1——Pendulum库入门指南 - 时光的艺术 时间,是编程世界中不可或缺的元素。无论是事件调度、数据分析,还是用户界面的显示,时间都扮演着关键的角色。然而,在Python的标准库`datetime`中,我们经常面临繁琐的操作和限制。为了摆脱这些束缚,我们引入了一个更加强大和灵活的时间处理库——Pendulum。 阅读详情

相关推荐

Python 中 Pendulum 库的详细使用:更精确的日期时间处理

Pendulum是一个功能强大的Python日期时间库,相比标准库datetime提供了更直观的API和更完善的时区支持。它支持灵活的时间创建、格式化和运算,包括时区转换、时间间隔计算和日期比较等高级功能。Pendulum与datetime无缝互操作,适用于需要复杂日期逻辑、多时区支持或人性化时间显示的场景。虽然性能略低于datetime,但其易用性和强大功能使其成为处理日期时间任务的理想选择。

数据知道的博客 1万+

pendulum,一个超酷的 Python 库!

Pendulum 是一个 Python 库,旨在提供更直观和功能丰富的日期和时间操作功能。它建立在 Python 标准库中的datetime模块之上,提供了更多功能、更简单的 API,并解决了时区和日期时间算术等问题。Pendulum 的主要特点包括:直观的 API:Pendulum 提供了易于理解和使用的方法和属性,使日期和时间操作更加直观。时区感知:Pendulum 对时区的支持非常强大,可以轻松处理不同时区的日期和时间。不可变性。

涛哥聊Python 1558

深入理解Python的pendulum库

pendulum是一个 Python 库,它提供了类似于 Python 标准库datetime的接口,但是更加现代和易用。它解决了datetime在处理时区和国际化上的一些局限性,并且添加了一些便捷的功能来简化日期时间的处理。在处理日期和时间数据时,格式化是一个非常重要的操作。Pendulum库提供了强大的自定义日期时间格式功能,能够满足各种复杂的格式化需求。

weixin_35749786的博客 835

Pendulum —— 一个专业的 Python 库

之前介绍时,有朋友留言提到 Arrow 的 “竞争者” Pendulum。它们都能很好地处理时间对象,但从专业性来说,Pendulum 更胜一筹,今天我们就来聊聊 pendulum。当你在处理日常编程任务时,是否经常被时间和日期的处理所困扰?是否曾试图找到一个既强大又简单的方法来处理各种时间问题,比如时区转换、时间差计算、或是日期格式化?而现在,有了 Pendulum,这些问题将不再是你的负担。

Python栈_基的博客 1515

通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

  前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯驱动程序实现TCP通讯的过程。 1、应用需求   在本次应用中,要求实现一个基于W5500的Modbus TCP服务器。这个需求的描述虽然只有一句话,但是这个需求的内容可不简单。我们首先来分析一下这个需求的具体内容。   为了实现基于W5500的Modbus TCP服务器,我们必先须基于W550

木南创智 5499

Halcon实战:如何快速找到图像中的多个圆并计算圆心距离(附完整代码)

本文详细介绍了Halcon在工业视觉检测中快速定位图像中的多个圆并计算圆心间距离的实战方法。通过两种核心算法(阈值分割和动态阈值)的对比分析,结合完整代码示例和参数调优技巧,帮助开发者高效解决多圆检测问题,提升工业检测精度与效率。

weixin_33701251的博客 316

python | pendulum,一个有趣的 日期和时间 Python 库!

在处理日期和时间时,Python 标准库中的 datetime 模块虽然功能强大,但有时显得过于复杂且缺乏一些便捷功能。为了解决这些问题,Pendulum 库应运而生。Pendulum 是一个 Python 日期和时间处理库,它在 datetime 模块的基础上进行了扩展,提供了更加友好的 API 和更多的功能。本文将详细介绍 Pendulum 库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。

csdn_xmj的博客 1004

双相机坐标系标定

工业双相机对位标定

sinat_33762356的博客 8317

一个超酷的Python库时间库:pendulum

Pendulum 旨在提供更直观和功能丰富的日期和时间操作功能。它建立在 Python 标准库中的datetime模块之上,提供了更多功能、更简单的 API,并解决了时区和日期时间算术等问题。Pendulum 的主要特点包括:直观的 API:Pendulum 提供了易于理解和使用的方法和属性,使日期和时间操作更加直观。时区感知:Pendulum 对时区的支持非常强大,可以轻松处理不同时区的日期和时间。不可变性。

2401_85428892的博客 1129

vhr 微人事系统安装与部署教程(SpringBoot + Vue 项目实战)

vhr(微人事)是一个开源的人力资源管理系统项目。系统采用前后端分离架构,主要技术栈包括:后端:MyBatis前端:VueElement UIAxios数据库:MySQL系统通常包含以下模块:员工管理部门管理职位管理薪资管理权限管理系统管理整体功能已经接近企业级后台系统。vhr(微人事)是一个非常经典的开源人力资源管理系统项目,基于SpringBoot + Vue 前后端分离架构。系统包含:员工管理部门管理权限管理薪资管理。

m0_69484557的博客 486

北斗导航 | 从北一到北二再到北三,你应该知道的北斗导航系统

博主github:https://github.com/MichaelBeechan 博主优快云:https://blog.youkuaiyun.com/u011344545 一、引言 我国高度重视北斗系统的建设和发展。自20世纪80年代开始探索适合我们国家国情的卫星导航系统发展道路,形成了“三步走”的发展战略:2000年底,建成北斗一号导航系统,向我国广大用户提供服务;2012年底,建成北斗二号导航系统,...

尘世冰封的专栏 3079

python基础===pendulum '''Python datetimes made easy.'''

https://pypi.python.org/pypi/pendulum Pendulum的一大优势是内嵌式取代Python的datetime类,可以轻易地将它整合进已有代码,并且只在需要的时候才进行调用。作者精心调校了时区,确保时区准确,还让每个实例都对时区敏感,默认使用UTC。还有就是提供了扩展的timedelta,使datetime计算更加容易。 与现有的其他库不同,它提供了一个可预测行...

软件测试技术的博客 136

DeepSeek如何构建可扩展的 AI 驱动交易系统,基于 MetaTrader 5 与 Python 利用先进的数据处理、机器学习和容器化部署来优化算法交易。

MT5 Python API 架构设计分为三层:通信层:利用异步消息传递(例如 ZeroMQ 或标准套接字编程)支持每秒数万个数据请求。转换层: C++ 动态库有效地将 MT5 命令转换为 Python 对象(反之亦然),从而优化速度和内存使用率。接口层:提供Pythonic API,封装了所有终端功能,包括:1)实时价格订阅(滴答或秒级更新)2)历史数据检索(从M1到更高的时间范围)3)订单流监控(交易详情和市场深度)4)策略执行引擎(用于算法交易)

iCloudEnd的博客 1382

Pendulum:Python中的优雅日期和时间处理库

Pendulum:Python中的优雅日期和时间处理库 在编程中,尤其是数据分析和Web开发中,处理日期和时间是常见的任务。Python标准库datetime模块虽然功能强大,但在某些场景下可能显得不够便捷或易用。为此,我们向您推荐,一个为Python设计的强大且易于使用的日期和时间库。 项目简介 Pendulum是由sdispater开发的一个开源项目,它旨在提供与datetime兼容的API,...

gitblog_00097的博客 522

嵌入式工程师成长之路(1)——元件基础(完整版)

为什么你的电路总是“玄学”故障?答案藏在这些元件里! 0欧电阻竟能引发信号反射?5V转3.3V电平匹配失败导致MCU烧毁?电容降压设计让电源“滋滋”响?——这些坑,本文全填平! 优快云硬件领域头部博主十年踩坑经验汇总,覆盖电阻、电容、电感核心难点+高频实战问题,让你从“调试地狱”直通“一次成功”!

云轩阁 2万+

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤 一般情况下,我们使用西门子的S7通信时都是将网络中的PLC的IP设置在同一网段,那么如果涉及到旧项目改造时,不方便修改IP地址,只能进行2个网段通信时,可以参考以下步骤: 准备条件: 2个路由器 CPU 1212C 主动连接 CPU 314C-2PN/DP 被动连接 网络搭建如下图所示: S7-1212C一侧 建立S7主动连接 ,IP地址:192.168.5.40,编写get/put 通信程序 S7-300 IP地址:192.168.0

Robot_PLC_HMI_Automation 2万+

肝了3天,整理了80个Python DateTime 例子,必须收藏!

日常工作中,用 Python 处理时间格式的数据是非常常见的,今天就来分享 DateTime 相关的示例文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的使用 time 模块展示当...

cainiao_python的博客 660

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pendulum,一个有趣的 Python 库!

Pendulum 库是一个功能强大且易于使用的日期和时间处理工具,能够帮助开发者在各种应用场景中高效地操作和计算时间。通过支持简单易用的 API、全面的时区支持、精确的时间计算、灵活的解析和格式化、强大的日期区间处理和自然语言处理,Pendulum 提供了强大的功能和灵活的扩展能力。本文详细介绍了 Pendulum 库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握 Pendulum 库的使用,并在实际项目中发挥其优势。

涛哥聊Python 2219

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

好用的 Python 日期库 -- pendulum

python 好用的关于时间的模块pendulum

weixin_45838810的博客 701

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Pendulum:优雅处理 Python 中的日期与时间

Pendulum 是一个现代化的 Python 日期时间处理库,解决了标准 datetime 模块在时区支持、自然语言解析等方面的不足。它提供了简洁直观的 API,支持时间加减、范围处理、时区转换等常用操作,并完全兼容 datetime。相比 arrow 等其他时间库,Pendulum 在兼容性、功能性和国际化方面表现更优,特别适合多时区应用、定时任务、数据分析等场景。通过人性化的语法和丰富的格式化选项,Pendulum 能显著简化 Python 项目中的时间处理代码。

萧鼎的博客 1179

Pendulum:可能是最好的 Python DateTime 库

datetime 模块是 Python 中最重要的内置模块之一,它为实际编程问题提供许多开箱即用的解决方案,非常灵活和强大。例如,timedelta 是我最喜欢的工具之一。 不过不得不说,datetime模块也有一些限制。 例如,当我们处理时区时,通常会显得短缺。有时,我们不得不引入一些第三方库作为补充。 此外,datetime 模块中的某些方面在其他编程语言中不很直观或不常用。 在本文中,我将介绍一个名为 Pendulum 的第三方库,它将解决内置 datetime 模块的所有问题,欢迎收藏学习,喜欢点赞

Python学习与数据挖掘 1227

python使用Pendulum库进行日期和时间操作

Pendulum是一个Python库,它提供了一种简单而强大的方式来处理日期和时间。它可以轻松地进行时区转换、日期计算、时间差计算等操作。在本教程中,我们将介绍如何使用Pendulum库进行日期和时间操作。

码奴一只猿 623

【Python】pendulum,一个更好用的Python库!

今天,我们将深入了解一个相对不那么知名但功能强大的 Python 包:pendulum。这个包是一个处理日期和时间的库,它以简洁和易于理解的方式提供了比标准 datetime 模块更丰富、更人性化的接口。安装 Pendulum首先,我们需要通过 pip 安装 pendulum 包。打开你的终端或命令提示符,输入以下命令:pipinstallpendulum安装完成后,我们就可以开始探索 pen...

fengdu78的博客 295
上一篇: 比正则快M倍以上,Python替换字符串的新姿势
下一篇: 一个神器,大幅提升爬虫爬取效率!
程序员小六
博客等级 码龄5年 111粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值