python初学笔记——Time模块详解
- 1. 明确几个概念
- 2.Time模块的内置函数
- 3.时间戳的计算
- 4.经典实例——计时器
编程小白的学习笔记
1. 明确几个概念
- 时间戳:从1970年1月1日午夜(历元)算起,所经过了多长时间来表示,可进行日期计算。
import time
now = time.time() #time() 返回当前时间戳 #函数前要加模块名
print(now)
>>> 1594910468.9340253 #时间戳单位
- 时间元组:用9组数字组成一个元组来处理时间。
import time
now = time.localtime(time.time()) #localtime() 接收时间戳,返回时间元祖
print(now)
>>> time.struct_time(tm_year=2020, tm_mon=7, tm_mday=16, tm_hour=16, tm_min=58, tm_sec=28, tm_wday=3, tm_yday=198, tm_isdst=1)
9组数字 | 属性 | 值(例子) |
0 | tm_year(四位数的年) | 2020 |
1 | tm_mon(月) | 1-12 |
2 | tm_mday(日) | 1-31 |
3 | tm_hour(小时) | 0-23 |
4 | tm_min(分钟) | 0-59 |
5 | tm_sec(秒) | 0-61(60或61为闰秒) |
6 | tm_wday(一周的第几天) | 0-6(0为周一) |
7 | tm_yday(一年的第几天) | 1-366 |
8 | tm_isdst(夏令时) | 0,1 |
- 格式化时间:将时间输出为你想要的格式。
import time
now=time.strftime('%Y-%m-%d,%H:%M:%S,%',time.localtime(time.time()))
#strftime() 接收时间元祖,返回定义的时间格式
print(now)
>>> 2020-07-16,17:05:20,Thursday
- python中的时间日期格式符号:
符号 | 描述 |
%y | 两位数的年份表示(00-99) |
%Y | 四位数的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月内中的一天(0-31) |
%H | 24小时制小时数(0-23) |
%l | 12小时制小时数(01-12) |
%M | 分钟数(00=59) |
%S | 秒(00-59) |
%a | 本地简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化的月份名称 |
%B | 本地完整的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%j | %j 年内的一天(001-366) |
%p | %p 本地A.M.或P.M.的等价符 |
%U | %U 一年中的星期数(00-53)星期天为星期的开始 |
%w | %w 星期(0-6),星期天为星期的开始 |
%W | %W 一年中的星期数(00-53)星期一为星期的开始 |
%x | 本地相应的日期表示 |
%X | 本地相应的时间表示 |
%Z | 当前时区的名称 |
%% | %号本身 |
2.Time模块的内置函数
#单机左侧函数有详细用法和实例
函数 | 描述 |
推迟调用线程的运行,secs指秒数。 | |
返回当前时间的时间戳(1970纪元后经过的浮点秒数)。 | |
接收时间戳并返回当地时间下的时间元组t。 | |
接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。 | |
接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串。 | |
用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。 | |
返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。 | |
作用相当于asctime(localtime(secs)),未给参数相当于asctime() | |
接收时间戳并返回格林威治天文时间下的时间元组t。 | |
接受时间元组并返回时间戳。 | |
根据fmt的格式把一个时间字符串解析为时间元组。 | |
根据环境变量TZ重新初始化时间相关设置。 |
3.时间戳的计算
该模块中所有时间计算都是在second(秒)的单位下运行的,注意单位换算。
import time
start_time = time.time() #开始计时,返回运行该行时的时间戳
………… #代码块
end_time=time.time() #结束计时
actual_time=int(end_time-start_time) #始末相减得中间代码的运行时间
#秒换算到分,int((end_time-start_time)/60)
4.经典实例——计时器
重点理解:print("\b"*(len(info)*2),end="",flush=True) 来实现倒计时功能。
import time
input('欢迎使用“时间管理器”!请按回车继续。')
while True:
task_name=input('请输入任务名:')
task_time=int(input('你觉得自己至少可以专注这个任务多少分钟?输入 N 分钟'))
input('此次任务信息:\n我要完成的任务:%s\n我至少要专注:%d分钟\n按回车开始计时:'%(task_name,task_time))
start=time.time() # 开始计时
start_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
# 格式化时间
#倒计时,range()生成设定的任务时间到0的数字,以-1的步长递减
for t in range(task_time*60,-1,-1):
info='请专注任务,还要保持专注'+str(t)+'秒哦!'
print(info,end='') # 后续打印不换行
print('\b'*(len(info)*2),end='',flush=True)
# 转义字符使用时,都需加''
# len()函数:返回字符串长度
# '\b'*数字 表示需要退多少格(删除多少字)
# 必须要加end='',否则无法进行退格,因为不在同一行
# 1个中文字符==2个英文字符(占位)
# flush=True 开启缓冲区,相当于刷新,在实现“跳动”功能中非常常见
# 不加flush会造成拥堵,不能实时显示
# 将前一次打印的info行全部删除后,并结合循环打印新行,实现倒计时功能
time.sleep(1) #sleep()函数不能忘,配合循环实现倒计时
print('你已经专注了 %d 分钟,很棒~再加把劲,完成任务!'%task_time)
task_status = input('请在任务完成后按输入y:')
if task_status=='y':
end=time.time() #结束计时
end_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
actual_time=int((end-start)/60)
# 时间戳的计算,始末相减,运算单位为's',换算为分
start_end = start_time + '——' + end_time + '\n'
#将任务记录写入文件中,windows系统用open()函数打开文件时,前加r 或 将\变为\\
with open(r'f:\onedrive\桌面\timelog3.txt','a',encoding='utf-8') as f:
f.write(task_name + ' 的预计时长为:' + str(task_time) + '分钟\n')
f.write(task_name + ' 的实际时长为:' + str(actual_time) + '分钟,具体时间为:' + start_end)
# with open() as 语句不需要关闭文件
again=input('建立一个新任务请按 y, 退出时间日志记录器请按 q:')
# 输入y后,for循环结束,仍在while循环下,只有break语句才能结束
if again=='q':
break
else:
print('抱歉,你的输入有误。请重启时间记录器。')
print('愿被你善待的时光,予你美好的回赠。')