我个人在 Python
中经常使用 arrow
模块替代datetime模块,个人认为非常好用,
文档
Github:https://github.com/crsmithdev/arrow/
Doc : https://arrow.readthedocs.io/en/latest/
安装
pip install arrow
使用例子
日常使用
# 获取当前时区当前时间,返回 arrow 对象
# <Arrow [2019-10-15T15:00:59.995577+08:00]>
t = arrow.now()
# 获取格林尼治时间,返回 arrow 对象
# <Arrow [2019-10-15T06:59:38.185731+00:00]>
t = arrow.utcnow()
# 切换时区
t.to('local')
arrow 对象操作
# 获取当前时间戳
# 1571124174
t.timestamp
# 格式化输出
# 2019-10-15 15:22:54
t.format("YYYY-MM-DD HH:mm:ss")
# 当天的开始时间, 即:当日00:00:00
t.floor('day')
# 获取当月最初的时间,即:当月1日00:00:00
t.floor('month')
# 当天的结束时间, 即:当日23:59:59
t.ceil('day')
# 获取当月最后的时间,即:当月最后1日23:59:59
t.ceil('month')
#单位时间跨度的起止时间
#(<Arrow [2018-11-06T12:00:00+08:00]>, <Arrow [2018-11-06T12:59:59.999999+08:00]>)
t.span('hour')
# (<Arrow [2018-11-01T00:00:00+08:00]>,<Arrow [2018-11-30T23:59:59.999999+08:00]>)
t.span('month')
t.span('week')
t.span('day')
# 替换部分时间
t = t.replace(hour=0, minute=30,second=0)
t.format('YYYYMMDD HH:mm:ss')
字符串生成 arrow
对象
# arrow.Arrow(YYYY,M,D)
# 返回的是一个arrow对象
t = arrow.Arrow(2019,10,15)
# 时间戳转换
# <Arrow [2019-10-15T07:22:54+00:00]>
t = arrow.get(1571124174)
# 从类似日期的字符串转为日期格式的数据
t = arrow.get('20181010', 'YYYYMMDD').format("YYYY-MM-DD")
# 2019-10-15 07:22:54
t.format("YYYY-MM-DD--HH-mm-ss")
生成连续区间日期
start = arrow.get('2018-09-01','YYYY-MM-DD')
end = arrow.get('2018-09-10','YYYY-MM-DD')
[dt for dt in arrow.Arrow.range('day',start,end)]
[<Arrow [2018-09-01T00:00:00+00:00]>,
<Arrow [2018-09-02T00:00:00+00:00]>,
<Arrow [2018-09-03T00:00:00+00:00]>,
<Arrow [2018-09-04T00:00:00+00:00]>,
<Arrow [2018-09-05T00:00:00+00:00]>,
<Arrow [2018-09-06T00:00:00+00:00]>,
<Arrow [2018-09-07T00:00:00+00:00]>,
<Arrow [2018-09-08T00:00:00+00:00]>,
<Arrow [2018-09-09T00:00:00+00:00]>,
<Arrow [2018-09-10T00:00:00+00:00]>]
时间推移
# 时间推移
# arrow.now().shift(days/weeks/months/years)
# 括号内取值为正则向未来移,为负则向过去移
t = arrow.now()
# 40分钟前
t = t.shift(minutes=-40)
# 三天前
t = t.shift(days=3)
# 10月后
t = t.shift(months=10)
t.format("m")
获取年月日属性
t = arrow.now()
# 年
t.year
# 月
t.month
# 日
t.day
# 时
t.hour
# 分
t.minute
# 秒
t.second
Token | Output | |
---|---|---|
Year | YYYY | 2000, 2001, 2002 … 2012, 2013 |
YY | 00, 01, 02 … 12, 13 | |
Month | MMMM | January, February, March … |
MMM | Jan, Feb, Mar … 1 | |
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 … 2 | |
d | 1, 2, 3 … 6, 7 | |
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 1 |
a | am, pm 1 | |
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 |