前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件测试|把datetime拍在沙滩上的pendulum模块

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

原创
作者头像
霍格沃兹测试开发Muller老师
发布2023-02-19 11:44:31
3060
发布2023-02-19 11:44:31
举报

前言

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

安装

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

代码语言:python
复制
pip install pendulum

获取某地的当地时间

代码语言:python
复制
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:00
2023-02-10T15:02:10.764323+08:00
2023-02-10T02:02:10.764323-05:00
2023-02-10T02:02:10.764323-05:00
2023-02-09T23:02:10.774224-08:00

时区运算

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

代码语言:python
复制
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获取日期时间

代码语言:python
复制
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)

# 获取昨天对应的 date
yesterday = pendulum.yesterday()
print(yesterday)
----------------------------
输出结果如下:
2023-02-15T11:31:10.771990+08:00
2023-02-15T00:00:00+08:00
2023-02-16T00:00:00+08:00
2023-02-14T00:00:00+08:00

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

获取其他信息

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

代码语言:python
复制
import pendulum

today = pendulum.local(
    2023, 6, 7, 11, 10, 30)

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

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

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

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

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

# 是否是闰年
print(today.is_leap_year())  
------------------------------
输出结果如下:
3
158
30
2
23
False

pendulum日期运算

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

代码语言:python
复制
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:00
2022-02-28T20:10:30+08:00

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

代码语言:python
复制
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 模块里面的 timedelta
print(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())  

----------------------------
输出结果如下:
2
35
155
1086
26071
1564307
93858477

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

总结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 安装
      • 获取某地的当地时间
        • 时区运算
          • pendulum获取日期时间
            • 获取其他信息
              • pendulum日期运算
                • 总结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档