关于日期处理,Python 提供了很多的库,比如标准库 datetime、第三方库 dateutil、arrow 等等。
在使用之前需要先安装,直接 pip install pendulum 即可。
下面来看一下用法,首先是 datetime, date, time 的创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import pendulum
dt = pendulum.datetime(
2022 , 3 , 28 , 20 , 10 , 30 )
print (dt.__class__)
print (dt)
dt = pendulum.datetime(
2022 , 3 , 28 , 20 , 10 , 30 , tz = "Asia/Shanghai" )
print (dt)
dt = pendulum.datetime(
2022 , 3 , 28 , 20 , 10 , 30 , tz = None )
print (dt)
d = pendulum.date( 2022 , 3 , 28 )
print (d.__class__)
print (d)
t = pendulum.time( 20 , 10 , 30 )
print (t.__class__)
print (t)
< / class >< / class >< / class >
|
如果创建 datetime 时,时区默认是 UTC。如果不想要时区,或者希望时区是本地时区,那么 pendulum 还专门提供了两个方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import pendulum
dt = pendulum.local(
2022 , 3 , 28 , 20 , 10 , 30 )
print (dt)
print (pendulum.local_timezone())
dt = pendulum.naive( 2022 , 3 , 28 , 20 , 10 , 30 )
print (dt)
|
然后 pendulum 还提供了几个方法,比如创建当前的 datetime,date 等等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import pendulum
dt = pendulum.now()
print (dt)
dt = pendulum.today()
print (dt)
dt = pendulum.tomorrow()
print (dt)
dt = pendulum.yesterday()
print (dt)
|
我们还可以根据时间戳或者字符串来创建:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import pendulum
dt1 = pendulum.from_timestamp( 1653828466 )
dt2 = pendulum.from_timestamp( 1653828466 ,
tz = pendulum.local_timezone())
print (dt1)
print (dt2)
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)
|
datetime、date、time 的创建我们说完了,然后再来看看它们支持的操作,这也是最核心的部分。
datetime 相关操作
操作非常多,我们逐一介绍。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import pendulum
dt = pendulum.local(
2022 , 3 , 28 , 20 , 10 , 30 )
print (dt.date())
print (dt.time())
print (dt.replace(year = 9999 ))
print (dt.timestamp())
print (dt.year, dt.month, dt.day)
print (dt.hour, dt.minute, dt.second)
print (dt.tz)
|
然后是生成字符串,pendulum.DateTime 对象可以转成各种格式的日期字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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())
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())
|
我们有时也需要判断当前日期是星期几、在当前这一年是第几天等等,pendulum 也已经帮我们封装好了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import pendulum
dt = pendulum.local(
2022 , 3 , 28 , 20 , 10 , 30 )
print (dt.isoweekday())
print (dt.day_of_year)
print (dt.days_in_month)
print (dt.week_of_month)
print (dt.week_of_year)
print (dt.is_leap_year())
|
最后就是日期的运算,这是 pendulum 最为强大的地方,至于为什么强大,我们演示一下就知道了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import pendulum
dt = pendulum.local(
2022 , 3 , 30 , 20 , 10 , 30 )
print (dt.add(months = 1 ))
print (dt.add(months = - 1 ))
|
像 Python 的内置模块 datetime 在将日期相加的时候,最多支持到天,我们无法计算下一周、下一个月、下一年的日期。而 pendulum 则可以很方便地处理,这也是我最喜欢的一点。
当然啦,add 里面的值为正,相当于日期往后退;值为负,相当于日期往前推。
然后是两个日期还可以做减法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import pendulum
dt1 = pendulum.local(
2021 , 1 , 20 , 11 , 22 , 33 )
dt2 = pendulum.local(
2022 , 3 , 30 , 20 , 10 , 30 )
period = dt2 - dt1
print (period.__class__)
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())
|
功能非常强大,Python 的 datetime 模块里面的 timedelta 最多只能计算两个日期差了多少天,而这里年月日时分秒均可。
以上就是本文的内容,当然 pendulum 的功能其实不止我们上面说的那些,有兴趣的话可以参考官网,但常用的差不多就这些东西。
以上就是使用Python日期库pendulum来处理日期和时间的详细内容
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。