python 时间处理之arrow模块

525 阅读4分钟

arrow模块需要安装

pip install arrow

1.获取时间

1.1 获取世界标准时间

import arrow
​
utc = arrow.utcnow()
print(utc)

result:

2021-09-19T02:56:00.435537+00:00

1.2 获取本地时间

utc = arrow.now()
print(utc)

result:

2021-09-19T10:57:07.648653+08:00

1.3 获取指定时区的时间

utc = arrow.now('Asia/Shanghai')
print(utc)

result:

2021-09-19T10:58:44.183601+08:00

2.arrow对象

2.1将时间戳转化为arrow对象

2.1.1 int类型

print(arrow.get(1519534533))

result:

2018-02-25T04:55:33+00:00

2.1.2 float类型

print(arrow.get(1519534533.9999))

result:

2018-02-25T04:55:33.999900+00:00

2.2 将字符串转换为arrow对象

2.2.1 格式化转换

print(arrow.get('2018-02-24 12:30:45', 'YYYY-MM-DD HH:mm:ss'))

result:

2018-02-24T12:30:45+00:00

2.2.2 遵循ISO-8601的字符串不需要格式字符串参数即可转换

print(arrow.get('2018-02-24T13:00:00.000-07:00'))

result:

2018-02-24T13:00:00-07:00

2.2.3 从字符串中通过格式参数搜索时间

print(arrow.get('June was born in May 1980', 'MMMM YYYY'))

result:

1980-05-01T00:00:00+00:00

2.3 通过时间元组进行创建

2.3.1 通过arrow.get()方法创建

print(arrow.get(2018, 2, 24))

result:

2018-02-24T00:00:00+00:00

2.3.2 通过arrow.Arrow()方法创建

print(arrow.Arrow(2018, 2, 24))

result:

2018-02-24T00:00:00+00:00

3.arrow对象的使用

3.1 datetime属性

3.1.1 获取datetime时间

import arrow
​
a = arrow.now()
print(a.datetime)

result:

2021-09-19 11:37:57.579250+08:00

3.1.2 获取datetime对象的值

(1)获取年

import arrow
​
a = arrow.now()
print(a.year)

result:

2021

(2)获取月份

print(a.month)

result:

9

(3)获取天

print(a.day)

result:

11

(4)获取小时

print(a.hour)

result:

11

(5)获取分钟

print(a.minute)

result

59

(6)获取秒

print(a.second)

result:

40

3.2 timestamp属性

import arrow
​
a = arrow.now()
print(a.timestamp())

result:

1632022941.547921

3.3 naive属性

import arrow
​
a = arrow.now()
print(a.naive)

result:

2021-09-19 11:43:09.433313

3.4 tzinfo属性

import arrow
​
a = arrow.now()
print(a.tzinfo)

result:

tzlocal()

3.5 时间推移

shift方法获取某个时间之前或之后的时间,关键字参数为years,months,weeks,days,hours,seconds,microseconds

3.5.1 三周后

import arrow
​
a = arrow.now()
print(a.shift(weeks=+3))

result:

2021-10-10T17:28:38.732386+08:00

3.5.2 一天前

print(a.shift(days=-1))

result:

2021-09-18T17:29:50.325986+08:00

3.5.3 距离最近的星期日

print(a.shift(weekday=6))

result:

2021-09-19T17:31:21.434495+08:00

这里weekday的取值从0到6

3.6 时间替换

import arrow
​
a = arrow.now()
print(a.replace(hour=9))

result:

2021-09-19T09:32:53.750634+08:00

这是将当前时间的小时替换为9,其余年月日、分和秒把持不变

3.7 时间区间和范围

3.7.1 获取所在的时间区间

import arrow
​
a = arrow.now()
print(a.span('hour'))

result:

(<Arrow [2021-09-19T17:00:00+08:00]>, <Arrow [2021-09-19T17:59:59.999999+08:00]>)

3.7.2 获取所在的时间区间的开始时间

print(a.floor('hour'))

result:

2021-09-19T17:00:00+08:00

3.7.3 获取所在的时间区间的结束时间

print(a.ceil('hour'))

result:

2021-09-19T17:59:59.999999+08:00

3.7.4 循环获取时间区间

start = arrow.Arrow(2018, 2, 24, 12, 30)
end = arrow.Arrow(2018, 2, 24, 15, 20)
for r in arrow.Arrow.span_range('hour', start, end):    #获取startend之间的时间区间
    print(r)

result:

(<Arrow [2018-02-24T12:00:00+00:00]>, <Arrow [2018-02-24T12:59:59.999999+00:00]>)
(<Arrow [2018-02-24T13:00:00+00:00]>, <Arrow [2018-02-24T13:59:59.999999+00:00]>)
(<Arrow [2018-02-24T14:00:00+00:00]>, <Arrow [2018-02-24T14:59:59.999999+00:00]>)
(<Arrow [2018-02-24T15:00:00+00:00]>, <Arrow [2018-02-24T15:59:59.999999+00:00]>)

3.7.4 循环获取获取间隔单位时间的时间

for r in arrow.Arrow.range('hour',start,end):        #获取间隔单位时间的时间
    print(r)

result:

2018-02-24T12:30:00+00:00
2018-02-24T13:30:00+00:00
2018-02-24T14:30:00+00:00

3.8 其他属性

3.8.1 ctime格式的日期

import arrow
​
print(a.format('YYYY-MM-DD HH:mm:ss'))
print(a.ctime())

result:

Sun Sep 19 18:04:49 2021

3.8.2 以整数形式返回星期几(0-6)

print(a.weekday())

result:

6

3.8.3 以整数形式返回一周中的ISO日(1-7)

print(a.isoweekday())

result:

7

3.8.4 返回3元组(ISO年,ISO周数,ISO工作日)

print(a.isocalendar())

result:

(2021, 37, 7)

3.8.5 返回日期的格雷戈里序数

print(a.toordinal())

result:

738052

4.arrow对象的输出

4.1 格式化输出

import arrow
​
a = arrow.now()
print(a.format('YYYY-MM-DD HH:mm:ss'))

result:

2021-09-19 18:04:49

4.2 人性化输出

4.2.1 相对于当前时间

import arrow
​
present = arrow.utcnow()
past = present.shift(hours=-1)
print(past.humanize())

result:

an hour ago

4.2.2 相对于参数时间

import arrow
​
present = arrow.utcnow()
past = present.shift(hours=-1)
future = present.shift(hours=2)
print(future.humanize(past))

result:

in 3 hours

4.2.3 指定地区语言

import arrow
​
present = arrow.utcnow()
past = present.shift(hours=-1)
print(past.humanize(present, locale='zh'))

result:

1小时前