文章目录
一、time模块
1、time模块介绍
Python中有两个模块可以完成时间操作:time和datetime,其中time有这几种方式来表示时间:
- 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
- 格式化的时间字符串(Format String)
- 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
2、time模块的使用
import time
# 1、时间戳格式
print(time.time()) # 1582293600.059389
# 2、 结构化时间
print(time.localtime()) # 本地时区的struct_time
print(time.gmtime()) # UTC时区的struct_time
'''
time.struct_time(tm_year=2020, tm_mon=2, tm_mday=21, tm_hour=22, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=52, tm_isdst=0)
time.struct_time(tm_year=2020, tm_mon=2, tm_mday=21, tm_hour=14, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=52, tm_isdst=0)
# 我们的时间是东八区和UTC标准时间相隔8个小时
'''
# 3、格式化时间
print(time.strftime('%Y-%m-%d %H:%M:%S')) #2020-02-21 22:00:00
3、格式转换
import time
# 1、时间戳和结构化时间相互转换
print(time.localtime(1582290777.6476405)) # 将时间戳转化为结构化时间
# >>> time.struct_time(tm_year=2020, tm_mon=2, tm_mday=21, tm_hour=21, tm_min=12, tm_sec=57, tm_wday=4, tm_yday=52, tm_isdst=0)
print(time.mktime(time.localtime())) # mktime(t) : 将一个struct_time转化为时间戳。
# >>> 1582293795.0
# 2、结构化时间和格式化时间相互转换
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 将结构化时间转化为格式化时间
# >>>2020-02-21 22:03:15
print(time.strptime('2020-02-21 21:19:43', '%Y-%m-%d %X')) # 将格式化时间转化为结构化时间
# >>> time.struct_time(tm_year=2020, tm_mon=2, tm_mday=21, tm_hour=21, tm_min=19, tm_sec=43, tm_wday=4, tm_yday=52, tm_isdst=-1)
# time.strptime('string', [format]) 在这个函数中,format默认为:"%Y %m %d %H:%M:%S"。
4、time模块常用函数
**1. time.sleep(secs) **
线程休眠指定时间,单位为秒。
import time
start = time.time()
time.sleep(2)
stop = time.time()
print('间隔时间为:%.4s秒' %(stop-start)) # 间隔时间为:2.00秒
2.process_time()
返回当前进程的系统和用户CPU时间总和的值(以小数秒为单位)作为浮点数。python3.8版本取代了原本的colck()
def procedure():
a=0
for i in range(10000):
a+=1
print(a)
to = time.process_time()
procedure()
t1=time.process_time()
print(t1-to)
'''
通常time.process_time()也用在测试代码时间上,根据定义,它在整个过程中。返回值的参考点未定义,因此我们测试代码的时候需要调用两次,做差值。
注意process_time()不包括sleep()休眠时间期间经过的时间。
'''
二、datetime模块
1、datetime模块的使用
和time相比,datetime的功能更强大,以下分别是两个模块的具体信息。
>>> dir(time)
['__doc__', '__name__', '__package__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime',
'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname', 'tzset']
>>> dir(datetime.datetime)
['__add__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
'__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', '__repr__',
'__rsub__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', 'astimezone', 'combine', 'ctime',
'date', 'day', 'dst', 'fromordinal', 'fromtimestamp', 'hour', 'isocalendar', 'isoformat', 'isoweekday', 'max', 'microsecond',
'min', 'minute', 'month', 'now', 'replace', 'resolution', 'second', 'strftime', 'strptime', 'time', 'timetuple', 'timetz', 'today',
'toordinal', 'tzinfo', 'tzname', 'utcfromtimestamp', 'utcnow', 'utcoffset', 'utctimetuple', 'weekday', 'year']
datetime模块的调用方法
[参考博客—Python datetime模块详解]
print(datetime.datetime.now()) # 获取当前时间
print(datetime.date.fromtimestamp(time.time())) # 时间戳直接转成日期格式 2016-08-19
print(datetime.datetime.now() + datetime.timedelta(3)) # 当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(-3)) # 当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) # 当前时间+3小时
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) # 当前时间+30分
三、python中常用格式化日期符号
python中时间日期格式化符号有:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
四、简易时间管理器
简易时间管理器,初学者可以用来加深对time模块的认识
'''
简易时间管理器,初学者可以用来加深对time模块的认识
version:01
author:金鞍少年
Date:2020-02-20
'''
import time
while True:
input("欢迎使用时间管理器(按回车键继续)")
name = input("请输入本次任务名称:")
sk_time = int(input("为本次任务分配时间?(输入N分钟):"))
dq_time = time.time()#获取当前时间戳
gssj_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print('此次任务信息\n 我要完成的任务:%s\n 我至少要专注:%d分钟'%(name,sk_time))
for x in range(sk_time*60,0,-1):
info='还剩'+str(x)+'秒,继续加油哦'
print(info,end='')
time.sleep(1) #1秒间隔
print("\b"*(len(info)*2),end="",flush=True)
print('你已经专注了 %d 分钟,很棒!'%sk_time)
q=input("建立一个新任务请按 x, 退出时间日志记录器并记录请按 y:")
if q=='y':
print('记录成功!')
end=time.time()#获取截止时间
end_time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
shijian=gssj_time+'----'+end_time+'\n'
with open('lists/times.txt', 'a', encoding='utf-8') as f:
f.write('项目%s:\n'%name)
f.write('分配的项目时间为:%s分钟\n'%sk_time)
f.write('实际项目时间为:'+shijian)
break
else:
q == 'x'
print('重启服务')
print('愿被你善待的时光,予你美好的回赠。')