写点什么

软件测试|把 datetime 拍在沙滩上的 pendulum 模块

  • 2023-11-01
    北京
  • 本文字数:2207 字

    阅读完需:约 7 分钟

前言

之前我们有一篇文章,使用 datetime 模块来获取昨天今天明天的日期,不说非常复杂,但还是要说一下,还是有点麻烦。而且 datetime 模块还有一大缺点,就是对于时区的处理功能不够强大。所以,后浪来了,pendulum 模块它来了,有了 pendulum,我只能说一句,datetime 别打电话来了,我怕 pendulum 误会!

安装

与 Python 内置的 datetime 模块不同,pendulum 是第三方库,需要我们通过 pip 进行安装,命令如下:


pip install pendulum
复制代码

获取某地的当地时间

import pendulum
local_time_tokyo = pendulum.now('Asia/Tokyo')local_time_shanghai = pendulum.now('Asia/Shanghai')local_time_newyork = pendulum.now('America/New_York')local_time_toronto = pendulum.now('America/Toronto')local_time_vancouver = pendulum.now('America/Vancouver')# 打印东京的当地时间print(local_time_tokyo)# 打印上海的当地时间print(local_time_shanghai)# 打印纽约的当地时间print(local_time_newyork)# 打印多伦多的当地时间print(local_time_toronto)# 打印温哥华的当地时间print(local_time_vancouver)-------------------------------2023-02-10T16:02:10.756265+09:002023-02-10T15:02:10.764323+08:002023-02-10T02:02:10.764323-05:002023-02-10T02:02:10.764323-05:002023-02-09T23:02:10.774224-08:00
复制代码

时区运算

不同时区的时间可以用来比较、运算和转化,例如:


import pendulum# 计算上海与温哥华的时差first = pendulum.datetime(2023, 2, 10, 15, 26, 11, 0, tz='Asia/Shanghai')second = pendulum.datetime(2023, 2, 10, 15, 26, 11, 0, tz='America/Vancouver')time_delta=first.diff(second).in_hours()print(time_delta)-------------------------# 输出结果如下:16
复制代码

pendulum 获取日期时间

import pendulum
# 创建当前的 datetime# 默认是本地时区,但时区可以指定local_time = pendulum.now()print(local_time)
# 创建当前的 date,但返回的仍是 datetime# 只不过时分秒均为 0,同样可以指定时区today = pendulum.today()print(today)
# 获取明天对应的 date# 返回的是 datetime,时分秒为 0# 时区可以指定,默认是本地时区tomorrow = pendulum.tomorrow()print(tomorrow)
# 获取昨天对应的 dateyesterday = pendulum.yesterday()print(yesterday)----------------------------输出结果如下:2023-02-15T11:31:10.771990+08:002023-02-15T00:00:00+08:002023-02-16T00:00:00+08:002023-02-14T00:00:00+08:00
复制代码


我们可以看到,使用 pendulum 时,我们获取昨天和明天的日期比 datetime 模块更加快速直接,datetime 模块需要借助 timedelta,提供时间差,才能计算昨天明天的日期。

获取其他信息

有时候我们除了需要了解日期,还需要了解这一天是周几,是今年的第几天,这周是今年的第几周等信息,这些东西,pendulum 也替我们封装好了方法,我们可以直接使用。


import pendulum
today = pendulum.local( 2023, 6, 7, 11, 10, 30)
# 返回星期几# 注意:星期一到星期天分别对应 1 到 7print(today.isoweekday())
# 返回一年当中的第几天# 范围是 1 到 366print(today.day_of_year)
# 返回一个月当中的第几天print(today.days_in_month)
# 返回一个月当中的第几周print(today.week_of_month)
# 返回一年当中的第几周print(today.week_of_year)
# 是否是闰年print(today.is_leap_year()) ------------------------------输出结果如下:315830223False
复制代码

pendulum 日期运算

接下来我们介绍的是 pendulum 相比 datetime 最强大的地方,日期时间的运算功能。示例代码如下:


import pendulum
today = pendulum.local( 2022, 3, 30, 20, 10, 30)
# 返回下一个月的今天print(today.add(months=1))
# 返回上一个月的今天# 但是上一个月是 2 月,并且是平年# 所以最多 28 天print(today.add(months=-1))----------------------------------输出结果如下:2022-04-30T20:10:30+08:002022-02-28T20:10:30+08:00
复制代码


上述代码返回的是月份的加减,但这不是全部,这只是基本操作,后面我们来展示一下更强的日期时间的运算操作。


import pendulum
time1 = pendulum.local( 2010, 6, 17, 12, 22, 33)
time2 = pendulum.local( 2013, 6, 7, 20, 10, 30)
period = time2 - time1# 返回的是 Period 对象# 相当于 datetime 模块里面的 timedeltaprint(period.__class__)"""<class 'pendulum.period.Period'>"""
# 但是功能方面,Period 要强大很多# 两者差了多少年print(period.in_years()) # 两者差了多少个月print(period.in_months()) # 两者差了多少个星期print(period.in_weeks()) # 两者差了多少天print(period.in_days()) # 两者差了多少个小时print(period.in_hours()) # 两者差了多少分钟print(period.in_minutes()) # 两者差了多少秒print(period.in_seconds())
----------------------------输出结果如下:235155108626071156430793858477
复制代码


如上,我们输出了两个时间点相差了多少时间的精确信息,不只是相差多少天,年月日时分秒还有周都可以计算出来,真的是非常方便快捷。

总结

本篇文章我们主要讲解了 pendulum 模块的安装和使用,这个模块比 datetime 模块使用更加方便,对于时区和时间的计算更加快捷,大家快用起来吧!


获取更多技术资料,请点击!

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
软件测试|把datetime拍在沙滩上的pendulum模块_霍格沃兹测试开发学社_InfoQ写作社区