最好的Python DateTime 库之 Pendulum 长篇解析

 更新时间:2021年11月16日 11:27:58   作者:Python学习与数据挖掘  
datetime 模块是 Python 中最重要的内置模块之一,它为实际编程问题提供许多开箱即用的解决方案,非常灵活和强大。例如,timedelta 是我最喜欢的工具之一

不过不得不说,datetime模块也有一些限制。 例如,当我们处理时区时,通常会显得短缺。有时,我们不得不引入一些第三方库作为补充。 此外,datetime 模块中的某些方面在其他编程语言中不很直观或不常用。

在本文中,我将介绍一个名为 Pendulum 的第三方库,它将解决内置 datetime 模块的所有问题,欢迎收藏学习,喜欢点赞支持,文末提供技术交流群。

1.直接替换 datetime

在这里插入图片描述

使用 pytz 等第三方库来解决一些 Python datetime不擅长的问题并不少见。但是,我们仍然需要导入 datetime 模块并将其用作必不可少的,因为我们需要使用它来实例化 datetime 对象。

让我向你展示为什么 Pendulum 是一种替代品。 首先,我们需要使用pip安装它。

pip install pendulum

该库的名称有点长,因此我建议使用别名导入它

import pendulum as pdl

虽然 pd 是一个较短的缩写,但我会为 Pandas 保留它。不想制造任何混乱。

让我们使用 Pendulum 创建一个 datetime 对象,并看看它的对象类型。

from datetime import datetime
dt = pdl.datetime(2021, 11, 6)
isinstance(dt, datetime)

在这里插入图片描述

Pendulum 继承了 Python datetime 对象。 因此,我们无需担心使用 datetime 模块中的一些原始功能。 从字面上看,Pendulum datetime 对象是 Python datetime 对象。

2. 时区

在这里插入图片描述

Pendulum 库最令人印象深刻的功能是时区, 这也是内置 datetime 模块的关键问题之一。 在 Python 3.9 之前,如果我们想使用 IANA 时区,我们必须涉及 pytz。

使用 Pendulum 库,我们可以像这样轻松地创建一个带有时区的日期时间对象。

dt_melbourne = pdl.datetime(2021, 11, 6, tz='Australia/Melbourne')
dt_brisbane = pdl.datetime(2021, 11, 6, tz='Australia/Queensland')
print(dt_melbourne)
print(dt_brisbane)

在这里插入图片描述

在上面的例子中,我们同时创建了两个对象。 但是,时区是不同的。 Pendulum 还允许我们轻松比较时间。

dt_melbourne.diff(dt_brisbane).in_hours()

在这里插入图片描述

多么容易啊! 比较具有不同时区的两个日期时间对象并获得确切结果!

如果我们需要定义多个 datetime 对象并希望重新使用 timezone 字符串,我们可以创建一个 timezone 对象并将其传递给 datetime 构造函数。

my_timezone = pdl.timezone('Australia/Melbourne')
dt_melbourne = pdl.datetime(2021, 11, 6, tz=my_timezone)
print(dt_melbourne)
print(dt_melbourne.timezone.name)

在这里插入图片描述

另一个很酷的功能是将时间返回到不同的时区。 例如,墨尔本是午夜,那么布里斯班是几点?

在这里插入图片描述

3. 日期时间解析

在这里插入图片描述

解析日期时间可能是编程中最常见的用例,Python datetime 模块做得很好。 但是与大多数其他编程语言相比,Python 使用了不同的格式 %Y%m%d。

Pendulum 允许我们使用如下常见的格式代码

pdl.from_format('2021-11-06 22:00:00', 'YYYY-MM-DD HH:mm:ss')

在这里插入图片描述

此外,它完全支持 RFC 3339 和 ISO 8601 格式,以及其他一些常见格式。 这意味着我们不必指定格式代码来将字符串解析为日期时间。

在这里插入图片描述

Pendulum 还集成了许多常见的日期时间扩展,例如 dateutil。 如果我们希望库依赖于 dateutil 解析器,我们可以传递标志 strict=False。

pdl.parse('21-11-06', strict=False)

在这里插入图片描述

除此之外,Pendulum 即时支持更多格式。 例如,只有数字的日期时间。

在这里插入图片描述

这个很有趣,指定年份、周数和那一周的日期,Pendulum 给你正确的日期时间。

在这里插入图片描述

如果我们特别想要一个日期对象或一个时间对象,只需指定exact=True,这比Python datetime 模块容易得多。

在这里插入图片描述

4. 字符串格式化

将字符串解析为日期时间对象后,下一件重要的事情就是将日期时间输出为具有格式的字符串。

首先,让我们有一个 datetime 对象。 由于 Pendulum 继承了 Python datetime,我们可以使用 now() 等所有方法。

在这里插入图片描述

然后,让我从 Pendulum 中挑选几个“to string”方法的例子,看看用开箱即用的格式输出日期时间是多么容易。

dt.to_date_string()  # with date only
dt.to_time_string()  # with time only
dt.to_formatted_date_string()  # month_abbr date, year
dt.to_day_datetime_string() # day, month_abbr date, year hh:mm am/pm
dt.to_iso8601_string()  # to ISO 9601 standard
dt.to_atom_string()  # to Atom format
dt.to_cookie_string()  # to cookie style format

在这里插入图片描述

当然,我们可以使用格式码来自定义输出字符串,格式更直观。

在这里插入图片描述

另一个很酷的东西是我们可以轻松地将一些不相关的字符串添加到格式字符串中,并让它们脱离格式。

在这里插入图片描述

5. 人类可读性

在内置的 Python datetime 模块中,timedelta 工具可以很好地完成比较工作。 然而,Pendulum 甚至可以通过在比较两个日期时间对象时提供一些更人性化的输出来改进它。

例如,diff_for_humans() 方法将日期时间对象与当前时间进行比较,并返回一个非常人性化的输出。

在这里插入图片描述

6. 查找相对日期时间

在这里插入图片描述

内置 Python 日期时间可以改进的方面之一是根据给定的日期时间查找相对日期时间。 例如,当我们要查找当月的最后一天时,我们必须使用 datetutil 模块中的 relativedelta。

from dateutil.relativedelta import relativedelta
datetime.datetime(2013, 2, 21) + relativedelta(day=31)

此外,代码不是很可读,因为我们使用 day=31 作为参数,尽管当月份少于 31 天时它会起作用。

在 Pendulum 中,再简单不过了。

在这里插入图片描述

内置 datetime 模块的另一个不便之处是查找一周中的某一天。 例如,如果我们要查找下周一的日期,这可能是最简单的方法。

from datetime import datetime, timedelta
datetime.now() + timedelta(days=(0-datetime.now().weekday()+7)%7)

它可以完成这项工作,但可读性差。 开发人员需要花一些时间来理解这行代码的逻辑是什么。

使用 Pendulum,就这么简单

在这里插入图片描述

我们甚至不用考虑用 0 还是 1 来表示星期一,因为 Pendulum 使用枚举来表示星期一。

同样,我们可以使用 previous() 方法来查找上一个星期二,如下所示。 此外,我们可以通过设置参数 keep_time=True 来保留时间部分。

在这里插入图片描述

7. 一些额外的便利

在这里插入图片描述

这个库中隐藏着更多的“秘密”。 再举几个例子,比如昨天或明天。

在这里插入图片描述

输出具有不同文化和语言区域设置的日期时间也很容易。

在这里插入图片描述

再举一个例子。 如果一个人出生于 1988 年 1 月 1 日,那么这个人的年龄是多少?

在这里插入图片描述

总结

在本文中,我介绍了Python 第三方库 Pendulum,它是 Python 内置 datetime 模块的直接替代品。 通过使用这个库,datetime 模块可以解决的许多问题,例如查找相对日期,现在都可以轻松解决。

更重要的是,Pendulum 提供了整洁干净的 API 来提高我们代码的可读性,并且这些解决方案更加直观。

技术交流

欢迎转载、收藏、有所收获点赞支持一下!

在这里插入图片描述

到此这篇关于最好的Python DateTime 库之 Pendulum 长篇解析的文章就介绍到这了,更多相关Python Pendulum内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用Python实现童年贪吃蛇小游戏功能的实例代码

    用Python实现童年贪吃蛇小游戏功能的实例代码

    这篇文章主要介绍了用Python实现童年贪吃蛇小游戏功能的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Python中range、np.arange和np.linspace的区别

    Python中range、np.arange和np.linspace的区别

    本文主要介绍了Python中range、np.arange和np.linspace的区别,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • python浅析守护线程与非守护线程的区别与使用

    python浅析守护线程与非守护线程的区别与使用

    守护线程,又称后台线程,它是在后台运行的,如果所有前台线程都死亡,那么后台线程就会自动死亡,本章我们来了解守护线程与非守护线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-08-08
  • 推荐技术人员一款Python开源库(造数据神器)

    推荐技术人员一款Python开源库(造数据神器)

    今天小编给大家推荐一款Python开源库,技术人必备的造数据神器!非常不错,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-07-07
  • 利用Python matplotlib绘制风能玫瑰图

    利用Python matplotlib绘制风能玫瑰图

    这篇文章主要给大家介绍了关于如何利用Python matplotlib绘制风能玫瑰图的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 超详细,教你用python语言实现QQ机器人制作教程

    超详细,教你用python语言实现QQ机器人制作教程

    这篇文章主要介绍了如何python语言实现QQ机器人,用图文详细的描述了其中的操作步骤,非常的简单易上手,有需要的朋友可以参考下
    2021-08-08
  • 一篇文章教你用Python实现一键文件重命名

    一篇文章教你用Python实现一键文件重命名

    这篇文章主要介绍了如何用python一键文件重命名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • python实现自动发送邮件发送多人、群发、多附件的示例

    python实现自动发送邮件发送多人、群发、多附件的示例

    下面小编就为大家分享一篇python实现自动发送邮件发送多人、群发、多附件的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • python 中的@运算符使用

    python 中的@运算符使用

    这篇文章主要介绍了python 中的@运算符使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python命令行传递参数的两种方式

    python命令行传递参数的两种方式

    python在命令行运行.py文件时,如何在命令行传递参数给运行程序,python默认提供了sys模块的系统参数属性实现接收命令行中的外部参数,本文给大家介绍了python命令行传递参数的两种方式,需要的朋友可以参考下
    2024-05-05

最新评论