最近做一个小程序开发任务,主要负责后台部分开发;根据项目需求需要实现三个定时任务: 1>定时更新微信token,需要2小时更新一次; 2>商品定时上线; 3>定时检测后台服务是否存活; 使用Python去实现这三个任务,这里需要使用定时相关知识点; Python实现定点与定时任务方式比较多,找到下面四中实现方式,每个方式都有自己应用场景;下面来快速介绍Python中常用的定时任务实现方式: 1>循环+sleep;…
Python最好的时间库, Python时间日期工具, Python处理日期和时间, arrow时间库使用详解, Python Arrow 教程, Python3 Arrow 时间日期增强库
Arrow 是用于处理日期和时间的 Python 模块。 与内置的日期和时间工具相比,它使创建,操作,格式化和转换日期,时间和时间戳变得更加容易。
安装 Arrow
Arrow 模块使用以下命令安装:
sudo pip3 install arrow
我们使用pip3
命令安装arrow
模块。
UTC 时间
实际需要一个全球时间。 全球时间可以避免时区和夏令时的混淆。 UTC(世界标准时间)是主要时间标准。 UTC 用于航空,天气预报,飞行计划,空中交通管制通关和映射。 与当地时间不同,UTC 不会随季节变化而变化。
utc_time.py
#!/usr/bin/python3 import arrow utc = arrow.utcnow() print(utc) print(utc.to('local'))
使用utcnow()
功能创建 UTC 时间。
当地时间
本地时间是特定区域或时区中的时间。
local_time.py
#!/usr/bin/python3 import arrow now = arrow.now() print(now) print(now.to('UTC'))
使用now()
功能创建本地时间。 to()
方法用于将本地时间转换为 UTC 时间。
解析时间
get()
方法用于解析时间。
parse_time.py
#!/usr/bin/python3 import arrow d1 = arrow.get('2012-06-05 16:20:03', 'YYYY-MM-DD HH:mm:ss') print(d1) d2 = arrow.get(1504384602) print(d2)
该示例从日期和时间字符串以及时间戳解析时间。
#!/usr/bin/python3 import arrow utc = arrow.utcnow() print(utc) unix_time = utc.timestamp print(unix_time) date = arrow.Arrow.fromtimestamp(unix_time) print(date)
该示例显示本地时间和 Unix 时间。 然后,它将 Unix 时间转换回 date 对象。
2017-09-02T21:57:11.483795+02:00 1504382231 2017-09-02T21:57:11+02:00
这是输出。
也可以将日期格式化为 Unix 时间。
format2unix.py
#!/usr/bin/python3 import arrow utc = arrow.utcnow() print(utc.format('X'))
通过将'X'
说明符传递给format()
方法,我们将当前本地日期打印为 Unix 时间。
$ ./format2unix.py 1504383196
这是输出。
格式化日期和时间
日期和时间可以用format()
方法格式化。
formatting.py
#!/usr/bin/python3 import arrow now = arrow.now() year = now.format('YYYY') print("Year: {0}".format(year)) date = now.format('YYYY-MM-DD') print("Date: {0}".format(date)) date_time = now.format('YYYY-MM-DD HH:mm:ss') print("Date and time: {0}".format(date_time)) date_time_zone = now.format('YYYY-MM-DD HH:mm:ss ZZ') print("Date and time and zone: {0}".format(date_time_zone))
该示例使用format()
方法以各种格式显示本地日期和时间。
$ ./formatting.py Year: 2017 Date: 2017-09-02 Date and time: 2017-09-02 22:00:32 Date and time and zone: 2017-09-02 22:00:32 +02:00
这是输出。
>>> a = arrow.now() >>> a <Arrow [2016-07-04T20:17:09.633154+08:00]> >>> a.timestamp 1467634629 >>> a.year 2016 >>> a.month 7 >>> a.day 4 >>> a.hour 20 >>> a.minute 17 >>> a.second 9 >>> a.microsecond 633154 >>> a.week 27
转换为区域时间
使用to()
方法,我们可以将日期和时间转换为区域时间。
converting.py
#!/usr/bin/python3 import arrow utc = arrow.utcnow() print(utc.to('US/Pacific').format('HH:mm:ss')) print(utc.to('Europe/Bratislava').format('HH:mm:ss')) print(utc.to('Europe/Moscow').format('HH:mm:ss'))
该示例创建一个 UTC 时间并将其转换为三个区域时间。
$ ./converting.py 13:24:06 22:24:06 23:24:06
这是输出。
now = arrow.now() print(now.format("YYYY-MM-DD hh:mm:ss")) # 2021-08-23 10:11:04 now_utc = now.to("utc") print(now_utc.format("YYYY-MM-DD hh:mm:ss")) # 2021-08-23 02:11:04 now1 = now.replace(day=31, hour=12) print(now1.format("YYYY-MM-DD hh:mm:ss")) # 2021-08-31 12:11:04 now2 = now.shift(months=-2) print(now2.format("YYYY-MM-DD hh:mm:ss")) # 2021-06-23 10:11:04
我们可以使用to()方法切换时区,使用replace()方法修改时间,使用shift()进行时间的前后推移。
同Python内置日期datetime库一样,arrow对象也支持时间的大小对比,还有计算时间差操作,除此之外,还有很多意想不到的操作,感兴趣的话,可以查看官方文档
工作日
可以使用weekday()
或format()
方法找到日期的工作日。
weekday.py
#!/usr/bin/python3 import arrow d1 = arrow.get('1948-12-13') print(d1.weekday()) print(d1.format('dddd'))
该代码示例的工作日为“ 1948-12-13”。
$ ./weekday.py 0 Monday
1948 年 12 月 12 日,是星期一。
移动时间
shift()
方法用于移动时间。shift 有点像游标卡尺,可以左右两边进行加减移位操作,加减的对象可以是年月日时分秒和星期。
shifting.py
#!/usr/bin/python3 import arrow now = arrow.now() print(now.shift(hours=5).time()) print(now.shift(days=5).date()) print(now.shift(years=-8).date())
该示例计算当前本地时间并将其偏移三倍。
print(now.shift(hours=5).time())
我们将时间提前了五个小时。
print(now.shift(days=5).date())
我们将日期提前五天。
print(now.shift(years=-8).date())
在这里,我们将日期向后移八年。
$ ./shifting.py 03:44:23.100887 2017-09-07 2009-09-02
这是输出。
替换时间
replace
(**kwargs) 替换某个时间区域
arw = arrow.utcnow()
>>> arw
<Arrow [2013-05-11T22:27:34.787885+00:00]>
>>> arw.replace(year=2014, month=6)
<Arrow [2014-06-11T22:27:34.787885+00:00]>
需要注意的是replace()
方法是产生一个新的arrow对象,所以原来的a
没变,另外注意hour
与hours
的区别,前者是设置时间,取值为0-23,而后者是在原来时间的基础上加减,取值可正可负。
夏令时
夏令时(DST)是在夏季的几个月中增加时钟的一种做法,因此晚上的夏时制持续时间更长。 在春季开始时将时间向前调整一小时,在秋季将时间向后调整为标准时间。
daylightsaving.py.py
#!/usr/bin/python3 import arrow now = arrow.now() print(now.format("YYYY-MM-DD HH:mm:ss ZZ")) print(now.dst())
该示例使用dst()
显示夏令时。
$ ./daylightsaving.py 2017-09-02 22:46:37 +02:00 1:00:00
输出显示本地时间已调整一小时。
人性化的日期和时间
在社交网站上,我们经常可以看到诸如“一个小时前”或“ 5 分钟前”之类的术语,这些术语可以为人们提供有关帖子创建或修改时间的快速信息。 Arrow 包含humanize()
方法来创建此类术语。
humanize.py
#!/usr/bin/python3 import arrow now = arrow.now() d1 = now.shift(minutes=-15).humanize() print(d1) d2 = now.shift(hours=5).humanize() print(d2)
该示例将两个日期人性化。
$ ./humanizing.py 15 minutes ago in 4 hours
这是输出。
Tokens
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 … 4, 5 | |
Day of Month | DD | 01, 02, 03 … 30, 31 |
D | 1, 2, 3 … 30, 31 | |
Day of Week | dddd | Monday, Tuesday, Wednesday … |
ddd | Mon, Tue, Wed … | |
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 |
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 | SSS | 000, 001, 002 … 998, 999 |
SS | 00, 01, 02 … 98, 99 | |
S | 0, 1, 2 … 8, 9 | |
Timezone | ZZ | -07:00, -06:00 … +06:00, +07:00 |
Z | -0700, -0600 … +0600, +0700 | |
Timestamp | X | 1381685817 |
API Guide
其他相关文章
在本教程中,我们使用带有 Arrow 模块的 Python 中的日期和时间。
本文:Python最好的时间库, Python时间日期工具, Python处理日期和时间, arrow时间库使用详解, Python Arrow 教程, Python3 Arrow 时间日期增强库