关于日期处理,Python提供了很多库,比如标准库datetime、第三方库dateutil、arrow等。这里介绍我个人最喜欢的库pendulum,使用起来非常方便,可以满足对日期的任何操作。使用前需要安装,直接pipinstallpendulum即可。下面看一下用法,首先是datetime、date、time的创建。importpendulumdt=pendulum.datetime(2022,3,28,20,10,30)print(dt.__class__)print(dt)"""2022-03-28T20:10:30+00:00"""#创建的对象是DateTime类型#并且有一个时区,默认是UTC#我们可以改变一个时区dt=pendulum.datetime(2022,3,28,20,10,30,tz="Asia/Shanghai")print(dt)"""2022-03-28T20:10:30+08:00"""#如果不想要时区,那么指定tz=Nonedt=pendulum.datetime(2022,3,28,20,10,30,tz=None)print(dt)"""2022-03-28T20:10:30"""#然后创建日期d=pendulum.date(2022,3,28)print(d.__class__)print(d)"""2022-03-28"""#timecreationt=pendulum.time(20,10,30)print(t.__class__)print(t)"""20:10:30"""创建日期时间时,默认时区为UTC。如果你不想要时区,或者想要时区为本地时区,那么pendulum也专门提供了两种方法。importpendulum#创建datetime时,设置为本地时区#还是调用pendulum.datetime函数#但是tz设置为pendulum.local_timezone()dt=pendulum.local(2022,3,28,20,10,30)print(dt)"""2022-03-28T20:10:30+08:00"""print(pendulum.local_timezone())"""Timezone('Asia/Shanghai')"""#不要设置创建datetime时的时区#内部也调用了pendulum.datetime函数#但是tz是Nonedt=pendulum.naive(2022,3,28,20,10,30)print(dt)"""2022-03-28T20:10:30"""然后pendulum也提供了几个方法,比如创建当前datetime,date等等。importpendulum#创建当前日期时间#默认为本地时区,但可以指定时区dt=pendulum.now()print(dt)"""2022-05-29T20:40:49.632182+08:00"""#创建当前datetime日期,但返回还是datetime#,只是时分秒都为0,还可以指定时区dt=pendulum.today()print(dt)"""2022-05-29T00:00:00+08:00"""#获取明天对应的日期#返回为datetime,时分秒为0#可以指定时区,默认为localtimezonedt=pendulum.tomorrow()print(dt)"""2022-05-30T00:00:00+08:00"""#得到昨天对应的datedt=pendulum.yesterday()print(dt)"""2022-05-28T00:00:00+08:00"""我们也可以使用时间戳或者字符串来创建:importpendulum#根据时间戳创建dt1=pendulum.from_timestamp(1653828466)dt2=pendulum.from_timestamp(1653828466,2052tz=pendulum.local"0"timezone())print(dt129T12:47:46+00:002022-05-29T20:47:46+08:00"""#根据字符串创建dt1=pendulum.parse("2020-05-0312:11:33")dt2=pendulum.parse("2020-05-0312:11:33",tz=pendulum.local_timezone())print(dt1)print(dt2)"""2020-05-03T12:11:33+00:002020-05-03T12:11:33+08:00"""日期时间、日期时间的创建我们说完了,接下来我们来看看它们支持的操作。这也是datetime的核心部分。datetime相关的操作有很多,我们一一介绍。importpendulumdt=pendulum.local(2022,3,28,20,10,30)#获取日期部分和时间部分print(dt.date())print(dt.time())"""2022-03-2820:10:30"""#替换dt的某一部分,返回一个新的datetime#年月日时分秒,时区可以替换print(dt.replace(year=9999))"""9999-03-28T20:10:30+08:00"""#转换为时间戳print(dt.timestamp())"""1648469430.0"""#返回年月日时分秒,timezoneprint(dt.year,dt.month,dt.day)print(dt.hour,dt.minute,dt.second)print(dt.tz)"""2022328201030Timezone('亚洲/上海')"""然后生成字符串,pendulum.DateTime对象可以转换成各种格式的日期字符串。importpendulumdt=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())"""datetime:2022-03-2820:10:30date:2022-03-28time:20:10:30iso8601:2022-03-28T20:10:30+08:00"""#当然也支持很多其他格式,但用的不多#随便挑几个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())"""atom:2022-03-28T20:10:30+08:00rss:Mon,28Mar202220:10:30+0800w3c:2022-03-28T20:10:30+08:00rfc822:Mon,28Mar2220:10:30+0800"""我们有时候需要判断当前日期是星期几,当年是星期几等,pendulum有已经为我们打包好了。importpendulumdt=pendulum.local(2022,3,28,20,10,30)#返回星期几#注意:周一到周日对应1到7print(dt.isoweekday())#1#返回星期几Days#范围是1到366print(dt.day_of_year)#87#返回月份中的第几天print(dt.days_in_month)#31#返回月份中的星期print(dt.week_of_month)#5#返回一年中的周数print(dt.week_of_year)#13#是否是闰年print(dt.is_leap_year())#False最后,日期的计算是pendulum最强大的部分。至于为什么厉害,我们炫耀一下就好了。importpendulumdt=pendulum.local(2022,3,30,20,10,30)#return下个月的今天print(dt.add(months=1))"""2022-04-30T20:10:30+08:00"""#返回上个月的今天#但是上个月是2月,是正常年份#所以最多28天print(dt.add(months=-1))"""2022-02-28T20:10:30+08:00"""#我们看到处理的很完美#这个方法的原型如下,年月日时分秒都支持,当然也支持星期。"""defadd(self,years=0,months=0,weeks=0,days=0,hours=0,minutes=0,seconds=0,microseconds=0,):"""像Python内置模块datetime在添加日期的时候,最多支持days,我们无法计算下周、下个月、下一年的日期。而且钟摆可以很方便的处理,这也是我最喜欢的一点。当然add里面的值是正数,相当于日期倒退;该值为负数,相当于向前推了日期。那么两个日期也可以相减:importpendulumdt1=pendulum.local(2021,1,20,11,22,33)dt2=pendulum.local(2022,3,30,20,10,30)period=dt2-dt1#返回Period对象#相当于datetime模块中的timedeltaprint(period.__class__)""""""#但是在功能上Period要强很多#两者之间的区别二过了多少年print(period.in_years())#1#两个相差多少个月print(period.in_months())#14#两个相差多少周print(period.in_weeks())#62#两者相差多少天print(period.in_days())#434#两者相差多少小时print(period.in_hours())#10424#多少分钟两者相差多少print(period.in_minutes())#625487#两者相差多少秒print(period.in_seconds())#37529277很厉害,Python的datetime中的timedelta模块只能计算两个日期最多相差多少天,这里可以使用年月日时分秒。以上就是本文的内容。当然,钟摆的功能不仅仅局限于我们上面提到的这些。有兴趣的可以参考官网,不过这些东西都是常用的。以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能收到海量学习资料,涵盖Python电子书和教程,数据库编程、Django、爬虫、云计算等。或者去编程学习网了解更多编程技术知识。