在python中有如下三种方式来表示时间:
a: 时间戳 (时间戳表示是从1970年1月1号 00:00:00开始到现在按秒计算的偏移量,是float类型。
返回时间戳的函数主要有 time()、clock()等。)
b:格式化的时间字符串
c:元组 (struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime()以及strptime())
>>> import time as tm
>>> tm.localtime()
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=14, tm_hour=14, tm_min=36, tm_sec=14, tm_wday=1, tm_yday=318, tm_isdst=0)
>>>
在元组中既可以直接使用元组索引获取对应项的值也可以调用成员符号获取对应的值
>>> import time as tm
>>> tm.localtime()
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=14, tm_hour=14, tm_min=36, tm_sec=14, tm_wday=1, tm_yday=318, tm_isdst=0)
>>> tl=tm.localtime()
>>> tl
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=14, tm_hour=14, tm_min=37, tm_sec=52, tm_wday=1, tm_yday=318, tm_isdst=0)
>>> tl[0] #使用元组索引获取值
2017
>>> tl[1]
11
>>> tl.tm_year #调用成员符号获取值
2017
>>>
time():返回当前时间的时间戳
>>> tm.time()
1510641753.9150999
>>>
localtime(1550265452.89) :将一个时间戳转换为当前时区的struct_time,即时间数组格式的时间 (无参数则默认当前时间即会调用time.time())
>>> tm.localtime(1550265452.89)
time.struct_time(tm_year=2019, tm_mon=2, tm_mday=16, tm_hour=5, tm_min=17, tm_sec=32, tm_wday=5, tm_yday=47, tm_isdst=0)
>>> tm.localtime()
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=14, tm_hour=14, tm_min=48, tm_sec=8, tm_wday=1, tm_yday=318, tm_isdst=0)
>>>
mktime(t):将一个struct_time转化为时间戳
>>> tm.mktime(tm.localtime())
1510642248.0
>>>
sleep(secs): 线程休眠指定时间,单位为秒。在不同的系统上含义不同。在NUix系统上,它返回的是“进程时间”(返回的是CPU时间),返回时间戳。
而在Windows中,第一次调用,返回的是进程运行时实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。
>>> tm.clock()
1.1327311734415319e-06 #返回的是进程运行时间的时间戳
>>> tm.clock()
24.568409033757654 #返回第二次调用与第一次调用之间时间的时间戳
>>> tm.clock()
32.22196849043937 #返回第三次调用与第一次调用之间时间 的时间戳
>>>
strftime( format [, t] ) :返回字符串表示的当地时间。
如果未指定,将传入time.localtime()。如果元组中任何一个元素越界,就会抛出ValueError的异常。函数返回的是一个可读表示的本地时间的字符串。
字符串格式符号(区分大小写):
%a 本地星期名称的简写(如星期四为Thu)
%A 本地星期名称的全称(如星期四为Thursday)
%b 本地月份名称的简写(如八月份为agu)
%B 本地月份名称的全称(如八月份为august)
%c 本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06)
%d 一个月中的第几天(01 - 31)
%f 微妙(范围0.999999)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,0 - 11)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(00 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之 前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期字符串(如15/08/01)
%X 本地相应时间字符串(如08:08:10)
%y 去掉世纪的年份(00 - 99)两个数字表示的年份
%Y 完整的年份(4个数字表示年份)
%z 与UTC时间的间隔(如果是本地时间,返回空字符串)
%Z 时区的名字(如果是本地时间,返回空字符串)
%% ‘%’字符
>>> tm.strftime("%Y-%m-%d %H:%M:%S",tm.localtime())
'2017-11-14 15:11:14'
strptime(string[,format]) :将格式字符串转化成struct_time.
>>> ff =tm.strptime('2017-11-14 15:11:14',"%Y-%m-%d %H:%M:%S")
>>> ff
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=14, tm_hour=15, tm_min=11, tm_sec=14, tm_wday=1, tm_yday=318, tm_isdst=-1)
>>> tm.strftime("%Y-%m-%d %H:%M:%S",ff)
'2017-11-14 15:11:14'
>>>
--------------------定时器--------------------------------
示例代码:
import time as t
class MyTimer():
def __init__(self):
self.unit = ['年','月','日','时','分','秒']
self.prompt='未开始计时'
self.lasted = []
self.begin = 0
self.end = 0
def __str__(self):
return self.prompt
__repr__ =__str__
def __add__(self,other):
prompt='总共运行了'
result=[]
for index in range(6):
result.append(self.lasted[index]+other.lasted[index])
if result[index]:
prompt += (str(result[index])+self.unit[index])
return prompt
#开始计时
def start(self):
self.begin = t.localtime()
self.prompt='提示:请先调用stop()停止计时!!!'
print('计时开始。。。')
#计时结束
def stop(self):
if not self.begin:
print('请先调用start()启动定时器...')
else:
self.end = t.localtime()
self._calc()
print('计时结束!!')
#统计时间
def _calc(self):
self.lasted=[]
self.prompt='运行时间:'
for index in range(6):
self.lasted.append(self.end[index]-self.begin[index])
if self.lasted[index]:
self.prompt += (str(self.lasted[index])+self.unit[index])
#将self.begin与self.end重置为0
self.begin = 0
self.end = 0