time模块

python学习-time模块

预备知识

  • time模块中时间表现的格式主要有三种:
  1. timestamp:时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。 time()、clock()
  2. struct_time:时间元组,共有九个元素组。 gmtime()、localtime()、strptime()
  3. format time :格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
  • struct_time 时间元组
    遵循元组的所有特性,如索引(从0开始)、切片、可遍历等
  1. tm_year :年
  2. tm_mon :月(1-12)
  3. tm_mday :日(1-31)
  4. tm_hour :时(0-23)
  5. tm_min :分(0-59)
  6. tm_sec :秒(0-59)
  7. tm_wday :星期几(0-6,0表示周日)
  8. tm_yday :一年中的第几天(1-366)
  9. tm_isdst :是否是夏令时(默认为-1)
//ex_1.py

# -*- coding: utf-8 -*-
#struct_time属性

import time

local_time = time.localtime()

print(local_time)
print(local_time[0])    #使用元组索引调用
print(local_time.tm_year)    #使用成员符号调用
print(local_time[0:3])    #元组切片

'''
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=8, tm_min=51, tm_sec=58, tm_wday=0, tm_yday=39, tm_isdst=0)
2021
2021
(2021, 2, 8)
[Finished in 0.1s]
'''

  • 时间字符串支持的格式符号:(区分大小写)

%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  时区的名字(如果是本地时间,返回空字符串)       
%%  ‘%’字符

常见函数使用

secs 表示 转换为time.struct_time类型的对象的秒数 ,t 表示 时间元组,string 表示 时间字符串,format 表示 格式化字符串

time.time()

返回当前时间的时间戳,time()精度上相对没有那么高,而且受系统的影响,适合表示日期时间或者大程序程序的计时


>>> import time
>>> print(time.time())
1612746275.0404444

time.localtime([secs])

将一个时间戳转换为当前时区的struct_time,即时间数组格式的时间


>>> import time
>>> local_time = time.localtime()
>>> print(local_time)
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=9, tm_min=9, tm_sec=26, tm_wday=0, tm_yday=39, tm_isdst=0)
>>> secs = time.time()
>>> print(time.localtime(secs))
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=9, tm_min=10, tm_sec=46, tm_wday=0, tm_yday=39, tm_isdst=0)
>>> print(secs)
1612746646.4186494

time.gmtime([secs])

将一个时间戳转换为UTC时区(0时区)的struct_time


>>> import time
>>> print(time.gmtime())
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=1, tm_min=14, tm_sec=40, tm_wday=0, tm_yday=39, tm_isdst=0)
>>> secs = time.time()
>>> print(time.gmtime(secs))
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=1, tm_min=14, tm_sec=49, tm_wday=0, tm_yday=39, tm_isdst=0)

time.mktime(t)

将一个struct_time转化为时间戳,如果输入的值不是一个合法的时间,将触发 OverflowError 或 ValueError


>>> import time
>>> t = time.localtime()
>>> print(t)
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=9, tm_min=16, tm_sec=31, tm_wday=0, tm_yday=39, tm_isdst=0)
>>> print(time.mktime(t))
1612746991.0

time.sleep(secs)

线程推迟指定的时间运行,线程睡眠指定时间,单位为秒

//ex_2.py

# -*- coding: utf-8 -*-
#time.sleep(10)

import time

start_time = time.time()
print('start:', start_time)

time.sleep(10)

end_time = time.time()
print('end:', end_time)
print('end_time - start_time = ', end_time - start_time)

'''
start: 1612747306.490495
end: 1612747316.491094
end_time - start_time =  10.000599145889282
[Finished in 10.1s]
'''

time.clock()

以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。

注意报错:

DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead start_time = time.clock()

time.perf_counter() :
返回性能计数器的值(以小数秒为单位)作为浮点数,具有最高可用分辨率的时钟,perf_counter() 会包含 sleep() 休眠时间,适用测量短持续时间
time.process_time() :
返回当前进程的系统和用户CPU时间总和的值(以小数秒为单位)作为浮点数,process_time()不包括sleep()休眠时间期间经过的时间

详细看https://blog.csdn.net/qq_27283619/article/details/89280974

在不同的系统上含义不同

  1. 在unix系统中,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。
  2. 在windows系统中,第一次调用,返回的是进程运行时实际时间(即为 0s )。而第二次及之后的调用是自第一次调用以后到现在的运行时间。

用法

  1. 在第一次调用的时候,返回的是程序开始运行的实际时间(即为 0s );
  2. 第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔。

在win32系统下,这个函数返回的是真实时间(wall time),而在Unix/Linux下返回的是CPU时间。

//ex_3.py

# -*- coding: utf-8 -*-
#time.clock()

import time

start_time = time.clock()
print('start:', start_time)

time.sleep(10)

end_time = time.clock()
print('end:', end_time)
print('end_time - start_time = ', end_time - start_time)

'''
start: 0.0501046
end: 10.0493474
end_time - start_time =  9.999242800000001
[Finished in 10.1s]
'''

time.asctime([t])

把一个表示时间的元组或者struct_time表示为 'Sun Aug 23 14:31:59 2015' 这种形式。如果没有给参数,会将time.localtime()作为参数传入。


>>> import time
>>> local_time = time.localtime()
>>> print(time.asctime(local_time))
Mon Feb  8 09:47:15 2021

time.ctime([secs])

把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果为指定参数,将会默认使用time.time()作为参数。


>>> import time
>>> secs = time.time()
>>> print(time.ctime(secs))
Mon Feb  8 09:49:23 2021

time.strftime(format [, t])

把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串,格式由参数format决定。如果未指定,将传入time.localtime()。如果元组中任何一个元素越界,就会抛出ValueError的异常。函数返回的是一个可读表示的本地时间的字符串。


>>> import time
>>> local_time = time.localtime()
>>> print(time.strftime("%Y-%m-%d %H:%M:%S %p", local_time))
2021-02-08 09:55:02 AM
>>> print(time.strftime('%H:%M:%S'))    //不加 t 则默认当前时间
09:59:08

time.strptime(string[,format])

将格式字符串转化成 struct_time 。

注意:使用strptime()函数将一个指定格式的时间字符串转化成元组时,参数format的格式必须和string的格式保持一致


>>> import time
>>> pattern = '%Y-%m-%d %H:%M:%S %p'
>>> date = '2021-02-08 09:55:02 AM'
>>> print(time.strptime(date, pattern))
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=9, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=39, tm_isdst=-1)
  

详细请看
https://blog.csdn.net/liagn/article/details/82597472
https://www.cnblogs.com/xtsec/p/6682052.html

posted @ 2021-02-08 10:10  Shivers0x72  阅读(105)  评论(0编辑  收藏  举报