Python---time库
目录
时间获取
时间格式化
程序计时
time库包含三类函数:
时间获取:time() ctime() gmtime()
时间格式化:strtime() strptime()
程序计时:sleep() perf_counter()
下面逐一介绍:
时间获取
函数 | 描述 |
time() | 获取当前时间戳(从世界标准时间的1970年1月1日00:00:00开始到当前这一时刻为止的总秒数)即计算机内部时间值,浮点数 |
>>>time.time() | |
1516939877 | |
ctime() | 获取当前时间并以易读方式表示,返回字符串 |
>>>time.ctime() | |
'Fri Jan 26 12:11:16 2023' | |
gmtime([secs]) | 获取当前时间,结构化,表示为计算机可处理的时间格式, |
>>>time.gmtime() | |
time.struct_time(tm_year=2023, tm_mon=1, | |
tm_mday=26, tm_hour=4, tm_min=11, tm_sec=16, | |
tm_wday=4, tm_yday=26, tm_isdst=0) | |
localtime([secs]) | 功能同上,localtime获取当地的时间,而gmtime获取世界统一时间 |
其中struct_time元组中元素的含义分别为
元素 | 含义 | 取值 |
tm_year | 年 | 4位数字,如2023 |
tm_mon | 月 | 1~12 |
tm_mday | 日 | 1~31 |
tm_hour | 时 | 0~23 |
tm_min | 分 | 0~59 |
tm_sec | 秒 | 0~61(60或 61是闰秒) |
tm_wday | 一周的第几日 | 0~6(0为周一) |
tm_yday | 一年的第几日 | 1~366(366为儒略历) |
tm_isdst | 夏令时 | 1:夏令时 |
0:非夏令时 | ||
-1:不确定 |
时间格式化
strftime(tpl,ts)
tpl是格式化模板字符串,用来定义输出效果
ts是计算机内部时间类型变量
>>>t = time.gmtime()
>>>time.strftime("%Y-%m-%d %H:%M:%S",t)
'2023-01-26 12:55:20'
strptime(str,tpl)
str是字符串形式的时间值
tpl是格式化模板字符串,用来定义输入效果
>>>timeStr = ‘2023-01-26 12:55:20'
>>>time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
#输出结果
time.struct_time(tm_year=2023, tm_mon=1,
tm_mday=26, tm_hour=12, tm_min=55, tm_sec=20,
tm_wday=3, tm_yday=26, tm_isdst=-1)
现在总结一下格式化控制符
格式化字符串 | 日期/时间说明 | 值范围和实例 |
%Y | 年份 | 0000~9999,例如:1900 |
%m | 月份 | 01~12,例如:10 |
%B | 月份名称 | January~December,例如:April |
%b | 月份名称缩写 | Jan~Dec,例如:Apr |
%d | 日期 | 01~31,例如:25 |
%A | 星期 | Monday~Sunday,例如:Wednesday |
%a | 星期缩写 | Mon~Sun,例如:Wed |
%H | 小时(24h制) | 00~23,例如:12 |
%I | 小时(12h制) | 01~12,例如:7 |
%p | 上/下午 | AM, PM,例如:PM |
%M | 分钟 | 00~59,例如:26 |
%S | 秒 | 00~59,例如:26 |
程序计时
程序计时指的是测量起止动作所经历时间的过程
测量时间:perf_counter()
产生时间:sleep()
perf_counter()
#返回一个CPU级别的精确时间计数值,单位为秒由于这个计数值起点不确定,连续调用差值才有意义
>>>start = time.perf_counter()
318.66599499718114
>>>end = time.perf_counter()
341.3905185375658
>>>end - start
22.724523540384666
sleep(s)
s是休眠时间,单位为秒,可以是浮点数
>>>def wait():
time.sleep(3.3)
>>>wait() #程序将等待3.3秒后再退出
举例:文本进度条
import time
scale = 10
print("------执行开始------")
for i in range(scale+1):
a = '*' * i
b = '.' * (scale - i)
c = (i/scale)*100
print("{:^3.0f}%[{}->{}]".format(c,a,b))
time.sleep(0.1)
print("------执行结束------")
结果:
如果想实现单行刷新,只需要加入"\r",即打印后光标退回到之前的位置\r
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
import time
scale = 50
print("执行开始".center(scale//2, "-"))
start = time.perf_counter()
for i in range(scale+1):
a = '*' * i
b = '.' * (scale - i)
c = (i/scale)*100
dur = time.perf_counter() - start
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))
结果: