在 python 中有2个常用的时间处理库:datetime, time。 涉及到的时间类型有4种:string, datetime, time tuple, timestamp。 想处理个时间就经常要在各种类型之间相互转换,转换到自己分分钟开始怀疑人生。
我不就是想处理个时间嘛,为何要如此难为我!能不能friendly一点!
直到发现了今天的主角Arrow,下面不得不好好安利一波了。
生成Arrow对象
使用的第一步当然是
import arrow
timestamp 转换为 Arrow 对象 -> arrow.get(timestamp) , 其中timestamp 的类型可以是整形,浮点型,也可以是字符型。
>>>arrow.get(1545127200)
<Arrow [2018-12-18T10:00:00+00:00]>>>>arrow.get('1545127200')
<Arrow [2018-12-18T10:00:00+00:00]>
string 转换为 Arrow 对象 -> arrow.get(string, [format_string]) , 其中时间的顺序、格式可以按照自己的方式指定。
>>> arrow.get('2018/12/18 10:00', 'YYYY/MM/DD HH:mm')
<Arrow [2018-12-18T10:00:00+00:00]
>>>> arrow.get('12/18/2018 10:00', 'MM/DD/YYYY HH:mm')
<Arrow [2018-12-18T10:00:00+00:00]>
时间推移
arrow.shift() 可以获取某个时间之前的时间或者之后的时间。返回一个被移动后的 arrow 对象,原对象不变。
>>> t = arrow.get('2018/12/18 10:00', 'YYYY/MM/DD HH:mm')
>>> t
<Arrow [2018-12-18T10:00:00+00:00]
>>>> t.shift(days=-2) #两天前
<Arrow [2018-12-16T10:00:00+00:00]
>>>> t.shift(weeks=-2) #两周前
<Arrow [2018-12-04T10:00:00+00:00]
>>>> t.shift(months=2) #两个月后
<Arrow [2019-02-18T10:00:00+00:00]
>>>> t.shift(years=1, months=1) #一年零一个月后
<Arrow [2020-01-18T10:00:00+00:00]>
格式化输出
可以将Arrow 对象输出成任何你所需要的格式。完整的时间格式字符串可以参见https://arrow.readthedocs.io/en/latest/#tokens
>>> t.format()
'2018-12-18 10:00:00+00:00'
>>> t.format('HH:ss YYYY.MM.DD')
'10:00 2018.12.18'
获取Arrow 对象属性
>>> t.year #取年份
2018
>>> t.month #取月份
12
>>> t.day #取日期
18
>>> t.hour #取小时
10
>>> t.timestamp #取时间戳
1545127200
>>> t.naive
datetime.datetime(2018, 12, 18, 10, 0) #取datetime格式
时区切换
涉及到时间的问题总逃不过时区的转换,不过不用担心,arrow 已经为我们设计好了解决方案。
>>> t #原时间为世界时
<Arrow [2018-12-18T10:00:00+00:00]
>>>> t.to('local') #+8:00的北京时
<Arrow [2018-12-18T18:00:00+08:00]
>>>> t.to('US/Pacific') #转换为美国时区
<Arrow [2018-12-18T02:00:00-08:00]
>>>> t.to('+04:00') #转换为任意时区
<Arrow [2018-12-18T14:00:00+04:00]>
当然了Arrow 的功能远远不止此,还有很多功能需要大家在实际使用中取体会。
相信各位胖友们看完今天的文章一定已经开始输入 conda install arrow 了。 用过之后大家一定会告别 datetime,积极拥抱 arrow ,如果没有请联系我。