持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
介绍
arrow为创建、操作、格式化和转换日期、时间和时间戳提供了一种合理且人性化的方法,简单来讲该模块可以帮助我们用更少的的代码处理日期和时间。
在Python中也有标准库来处理日期和时间,那么为什么还要使用arrow呢?在使用Python内置的time、datetime等模块时,各种格式的时间日期格式转换是非常麻烦的,而arrow则解决了这个问题,提供了更加简单的方式进行时间格式转换。
Python3.6及以上版本才支持arrow模块,该模块基本上可以替代datetime模块的功能。
使用
安装
pip install arrow
使用 - 获取时间
可以直接获取当前时间(now)
arrow.utcnow()
<Arrow [2013-05-07T04:20:39.369271+00:00]>
arrow.now()
<Arrow [2013-05-06T21:20:40.841085-07:00]>
arrow.now('US/Pacific')
<Arrow [2013-05-06T21:20:44.761511-07:00]>
也可以将int或者float类型的时间戳进行格式转换
arrow.get(1367900664)
<Arrow [2013-05-07T04:24:24+00:00]>
arrow.get(1367900664.152325)
<Arrow [2013-05-07T04:24:24.152325+00:00]>
也支持从根据格式从字符串中解析出时间
arrow.get('2013-05-05 12:30:45', 'YYYY-MM-DD HH:mm:ss')
<Arrow [2013-05-05T12:30:45+00:00]>
甚至支持从一个非时间格式的字符串中获取到该字符串的时间。
arrow.get('June was born in May 1980', 'MMMM YYYY')
<Arrow [1980-05-01T00:00:00+00:00]>
arrow对象也可以直接实例化,参数和datetime是一致的。
arrow.get(2013, 5, 5)
<Arrow [2013-05-05T00:00:00+00:00]>
arrow.Arrow(2013, 5, 5)
<Arrow [2013-05-05T00:00:00+00:00]>
使用 - 属性
- datetime - 获取日期或者时间戳
a = arrow.utcnow()
a.datetime
datetime.datetime(2013, 5, 7, 4, 38, 15, 447644, tzinfo=tzutc())
- 获取对象中的具体值,比如年月日等
a.year # 年份
2013
a.date() # 日期
datetime.date(2013, 5, 7)
a.time() # 时间
datetime.time(4, 38, 15, 447644)
使用 - 格式化
可以通过指定时间的格式来对arrow进行格式化操作
arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')
'2013-05-07 05:23:16 -00:00'
使用 - 修改
获取一个arrow对象之后,可以对得到的值进行修改或者进行加减操作。
# 修改值
arw = arrow.utcnow()
arw
<Arrow [2013-05-12T03:29:35.334214+00:00]>
arw.replace(hour=4, minute=40)
<Arrow [2013-05-12T04:40:35.334214+00:00]>
# 加减值
arw.shift(weeks=+3)
<Arrow [2013-06-02T03:29:35.334214+00:00]>
使用 - 时区转换
可以通过时区的名称将UTC时区改为其他时区。
utc = arrow.utcnow()
utc
<Arrow [2013-05-07T05:24:11.823627+00:00]>
utc.to('US/Pacific')
<Arrow [2013-05-06T22:24:11.823627-07:00]>
utc.to(tz.gettz('US/Pacific'))
<Arrow [2013-05-06T22:24:11.823627-07:00]>
使用 - 支持的格式
下述表格列举了arrow可以解析或者个事啊的时间或者日期格式。
| token | output | |
|---|---|---|
| Year | YYYY | 2000, 2001, 2002 … 2012, 2013 |
| YY | 00, 01, 02 … 12, 13 | |
| Month | MMMM | January, February, March … |
| MMM | Jan, Feb, Mar … | |
| MM | 01, 02, 03 … 11, 12 | |
| M | 1, 2, 3 … 11, 12 | |
| Day of Year | DDDD | 001, 002, 003 … 364, 365 |
| DDD | 1, 2, 3 … 364, 365 | |
| Day of Month | DD | 01, 02, 03 … 30, 31 |
| D | 1, 2, 3 … 30, 31 | |
| Do | 1st, 2nd, 3rd … 30th, 31st | |
| Day of Week | dddd | Monday, Tuesday, Wednesday … |
| ddd | Mon, Tue, Wed … | |
| d | 1, 2, 3 … 6, 7 | |
| ISO week date | W | 2011-W05-4, 2019-W17 |
| Hour | HH | 00, 01, 02 … 23, 24 |
| H | 0, 1, 2 … 23, 24 | |
| hh | 01, 02, 03 … 11, 12 | |
| h | 1, 2, 3 … 11, 12 | |
| AM / PM | A | AM, PM, am, pm |
| a | am, pm | |
| Minute | mm | 00, 01, 02 … 58, 59 |
| m | 0, 1, 2 … 58, 59 | |
| Second | ss | 00, 01, 02 … 58, 59 |
| s | 0, 1, 2 … 58, 59 | |
| Sub-second | S… | 0, 02, 003, 000006, 123123123123… |
| Timezone | ZZZ | Asia/Baku, Europe/Warsaw, GMT … |
| ZZ | -07:00, -06:00 … +06:00, +07:00, +08, Z | |
| Z | -0700, -0600 … +0600, +0700, +08, Z | |
| Seconds Timestamp | X | 1381685817, 1381685817.915482 … |
| ms or µs Timestamp | x | 1569980330813, 1569980330813221 |
总结
该模块还有一些更加人性化的使用方式,比如下述代码:
past = arrow.utcnow().shift(hours=-1)
past.humanize()
'an hour ago'
但是在实际开发中并不经常使用,有兴趣的小伙伴可以在官方文档中进行学习哦~