你还在用datetime模块吗?Arrow更值得你使用
前言
说到Python是如何处理时间日期的,你可能马上会想到datetime、time、dateutil等模块。它们都是Python的标准库,确实能用来处理时间日期问题。但众多模块分别处理不同的问题,加上时区和时间戳的转换不够友好,因此体验不是很好。
那么有没有一个模块,能集成上述所有的功能,体验更人性化呢?有,那就是今天的主角:Arrow模块。
Arrow的安装
安装很简单,输入pip install arrow
即可。需要注意的是:arrow仅支持Python3.6之后的版本,如果你的Python版本小于Python3.6,需要升级一下版本了。
Arrow的使用
arrow是第三方库,对于时间的操作都是基于arrow对象,获取到arrow对象后,需要什么操作,调用对象的相应方法或属性就行了,用起来非常的方便。
arrow在功能上完全可替代标准库time、datetime等库,做时间日期的格式化、转换等操作,记住arrow就够了。
获取当前时间
In [1]: import arrow
In [2]: arrow.now()
Out[2]: <Arrow [2022-10-09T14:19:23.526083+08:00]>
In [3]: arrow.utcnow()
Out[3]: <Arrow [2022-10-09T06:19:30.451118+00:00]>
In [4]: arrow.now('US/Pacific')
Out[4]: <Arrow [2022-10-08T23:21:49.861943-07:00]>
通过arrow.utcnow()
得到的是世界标准时间。通常我们用arrow.now()
来获取本地时间,如果要获取特定时区的时间,比如要获取美国时间,输入arrow.now('US/Pacific')
来获取。
时间戳及格式化转换
时间戳转换
在datetime中时间戳的转换,个人认为比较麻烦。比如有一个时间字符串需要将它转为时间戳,做法如下:
In [28]: import time
In [29]: time_str = "2020-10-09 12:20:00"
In [30]: #转换成时间数组
...: timeArray = time.strptime(dt, "%Y-%m-%d %H:%M:%S")
In [31]: #转换成时间戳
...: timestamp = time.mktime(timeArray)
In [32]: timestamp
Out[32]: 1462451334.0
用标准库的话拿到时间字符串,要先将它格式化,再获取到对应的时间戳。
而用arrow就方便多了,直接转为arrow对象,然后调用timestamp即可。
In [33]: import arrow
In [34]: time_str = "2020-10-09 12:20:00"
In [35]: # 获取时间字符串的时间戳
...: timestamp = arrow.get(time_str).timestamp()
In [36]: timestamp
Out[36]: 1602246000.0
In [37]: # 再转为arrow对象
...: arrow_time = arrow.get(timestamp)
In [38]: arrow_time
Out[38]: <Arrow [2020-10-09T12:20:00+00:00]>
时间形式格式化:format搞定一切
如果想转换时间格式呢?那也简单,在arrow中只要获取到arrow对象,再调用对应的方法即可。
比如要进行时间字符串的格式化,获取到arrow对象再format
就行了,示例:
In [44]: time_str = "2020-10-09 12:20:00"
In [45]: arrow_time = arrow.get(time_str).format('YYYY-MM-DD')
In [46]: arrow_time
Out[46]: '2020-10-09'
其他时间格式转为arrow对象
arrow中用arrow.get({时间格式})
即可将各种不同的时间格式转为arrow对象,使用起来非常方便。
来几个例子:
# 字符串转arrow对象
In [39]: arrow.get('2020-10-09 12:20:00', 'YYYY-MM-DD HH:mm:ss')
Out[39]: <Arrow [2020-10-09T12:20:00+00:00]>
In [40]: arrow.get('2020-10-09 12:20:00')
Out[40]: <Arrow [2020-10-09T12:20:00+00:00]>
In [41]: arrow.get(2020,10,9)
Out[41]: <Arrow [2020-10-09T00:00:00+00:00]>
In [42]: arrow.get(2020,10,9, 12)
Out[42]: <Arrow [2020-10-09T12:00:00+00:00]>
In [43]: arrow.get(2020,10,9, 12,20)
Out[43]: <Arrow [2020-10-09T12:20:00+00:00]>
# 也可使用arrow.Arrow来获取arrow对象
In [44]: arrow.Arrow(2020,10,9)
Out[44]: <Arrow [2020-10-09T00:00:00+00:00]>
arrow对象有哪些属性
我们获取到arrow对象后,可以直接使用它的相关属性如年月日等。主要属性有:
In [54]: t = arrow.now()
In [55]: t
Out[55]: <Arrow [2022-10-09T15:15:30.724130+08:00]>
In [56]: t.year # 获取年份
Out[56]: 2022
In [57]: t.month # 获取月份
Out[57]: 10
In [58]: t.day # 获取一个月的第几天
Out[58]: 9
In [59]: t.hour # 获取小时
Out[59]: 15
In [60]: t.minute # 获取分钟
Out[60]: 15
In [61]: t.second # 获取秒数
Out[61]: 30
In [62]: t.week # 获取一年中的第几周
Out[62]: 40
arrow如何进行时间计算
时间计算在工作中几乎都会碰到,比如计算10天后的日期。arrow中直接调用arrow对象的shift方法,使用起来非常方便。来几个例子就懂了:
In [64]: t = arrow.now()
In [65]: t
Out[65]: <Arrow [2022-10-09T15:23:42.000659+08:00]>
In [66]: # 计算10天前的时间
In [67]: t.shift(days=-10)
Out[67]: <Arrow [2022-09-29T15:23:42.000659+08:00]>
In [68]: # 2周后的时间
In [69]: t.shift(weeks=2)
Out[69]: <Arrow [2022-10-23T15:23:42.000659+08:00]>
In [70]: # 3个月前的时间
In [71]: t.shift(months=-3)
Out[71]: <Arrow [2022-07-09T15:23:42.000659+08:00]>
In [72]: # 上一年的时间
In [73]: t.shift(years=-1)
Out[73]: <Arrow [2021-10-09T15:23:42.000659+08:00]>
区域转换
有些场景我们需要对时间进行区域转换,比如获取美国时间。
arrow中用to()
方法即可实现,看例子:
In [84]: local_time = arrow.now()
# 本地时间
In [85]: local_time.format('YYYY-MM-DD HH:mm:ss')
Out[85]: '2022-10-09 15:32:36'
# 美国时间
In [86]: local_time.to('US/Pacific').format('YYYY-MM-DD HH:mm:ss')
Out[86]: '2022-10-09 00:32:36'
# 莫斯科时间
In [87]: local_time.to('Europe/Moscow').format('YYYY-MM-DD HH:mm:ss')
Out[87]: '2022-10-09 10:32:36'
工作日/星期获取
获取一个时间是星期几,在arrow中使用weekday()
方法或者通过format('dddd')
即可获取。看例子:
In [90]: local_time = arrow.now()
In [91]: local_time
Out[91]: <Arrow [2022-10-09T15:36:55.056116+08:00]>
In [92]: local_time = arrow.now()
In [93]: local_time.format('YYYY-MM-DD HH:mm:ss')
Out[93]: '2022-10-09 15:37:16'
In [94]: local_time.weekday()
Out[94]: 6
In [95]: local_time.format('dddd')
Out[95]: 'Sunday'
小结
这里总结了Python第三方库Arrow的用法,当你感觉到标准库处理时间很麻烦的时候,用Arrow试试吧,它用法简单,功能却很强大。
- 点赞
- 收藏
- 关注作者
评论(0)