前言
之前我们有一篇文章,使用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: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
时区运算
不同时区的时间可以用来比较、运算和转化,例如:
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)
# 获取昨天对应的 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也替我们封装好了方法,我们可以直接使用。
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最强大的地方,日期时间的运算功能。示例代码如下:
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
上述代码返回的是月份的加减,但这不是全部,这只是基本操作,后面我们来展示一下更强的日期时间的运算操作。
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模块使用更加方便,对于时区和时间的计算更加快捷,大家快用起来吧!