Time 的表示方式
在Python中,通常时间戳,格式化的时间字符串,元组三种方式表示时间
时间戳 (timestamp)
timestamp通常表示从1970年1月1日00时00分00秒开始,按秒计算的偏移量
也就是从1970年1月1日00时00分00(北京时间:1970年1月1日08时00分00)起,到现在的毫秒数
时间戳是一个经加密后形成的凭证文档,包含三部分
- 需加时间戳的文件摘要(digest);
- DTS 收到文件的日期和时间;
- DTS 的数字签名
from time import *
print(time())
1542352379.598851
Python3.7 中支持的最大时间戳为32535244799(3001 -01 -01 15:59:59)
时间格式化符号
备注:
- %p只有与%I配合时才有效果;
- 文档中描述00-61,闰年秒站两秒;
- 当使用strptime()函数时,只有这一年的周数和天数确定是%U和%w才会计算
struct_time 元组
Python函数用一个元组装起来的九个数字处理时间,这个元组被称作struct_time元组
该元组共有 9 个元素:
年、月、日、时、分、秒、一年中的第几周、一年中的第几天、是否为夏令时
Time 模块中的常用函数
import time
from time import *
time()
用于返回当前时间的时间戳(timestamp),不需要传递参数
localtime([sces]) ;gmtime([secs])
- localtime([secs])作用是将时间戳转换为本地时间,secs指转换为stuct_time类型的对象秒数;如果secs参数未输入,就以当前时间为转换标准,返回结果为时间元组(stuct_time)
- gmtime([secs])与之类似,区别在于后者以UTC时区(0时区)转换时间戳
mktime(t)
- 用于执行localtime([sces]) ;gmtime([secs])的反向操作,接收sturct_time对象作为参数(t),返回秒数表示的时间的浮点数;
- 参数t表示结构化的时间或完整的9位元素
strftime(format[,t]) ; strptime(string[,format])
- strftime(format[,t]) 用于接收时间元组,返回可读字符串标识当地时间;
- 格式由参数format决定;
- strptime(string[,format]) 可以理解为前者的反向操作,将指定格式的字符串拆解为时间元组
# 备注为执行结果
from time import *
print(localtime()) # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=16, tm_hour=15, tm_min=42, tm_sec=25, tm_wday=4, tm_yday=320, tm_isdst=0)
print(gmtime()) # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=16, tm_hour=7, tm_min=42, tm_sec=25, tm_wday=4, tm_yday=320, tm_isdst=0)
print(mktime(localtime())) # 1542354145.0
t = (2018,3,11,16,50,38,0,0,0)
print(strftime('%a %b %d %Y %H:%M:%S',localtime(mktime(t)))) # Sun Mar 11 2018 16:50:38
print(strptime('May 24 13 40 53 2018','%b %d %H %M %S %Y')) # time.struct_time(tm_year=2018, tm_mon=5, tm_mday=24, tm_hour=13, tm_min=40, tm_sec=53, tm_wday=3, tm_yday=144, tm_isdst=-1)
附上三种时间格式的转换图(asctime([t]) , ctime([secs])下文)
asctime([t]) ; ctime([secs])
- asctime([t]) 用于接收一个时间元组,返回一个可读长度为24个字符的字符串;
- t指完整的9位元组或通过gmtime(),localtime()返回的时间值;
- ctime([secs])用于接收一个时间戳,转化为time.asctime()的形式,如果未指定参数或参数为None,就默认以time()为参数;
- ctime() 相当于 asctime(localtime(secs))
# 备注为执行结果
from time import *
t = (2018,3,11,16,50,38,0,0,0)
print(asctime(t)) # Mon Mar 11 16:50:38 2018
print(ctime(mktime(t))) # Sun Mar 11 16:50:38 2018
由执行结果看到:
若传入的参数 t 为手动编写的元组,asctime()函数只转换对应格式,不考虑实际周期天数。实际为:Sunday
sleep(secs)
- 用于推迟调用线程的运行,可通过secs参数指定进程挂起的时间;
- secs参数代表推迟执行的秒数
from time import *
sleep(3)
print('a + b')
运行代码3秒后展示结果a + b
clock()
- 用来衡量不同程序之的耗时;
- 该函数在不同的系统上含义不同:
UNIX中返回的是“进程时间”,是用秒表示的浮点数(timestamp);
Windows中,第一次调用返回进程运行的实际时间 / 第二次之后的调用返回自第一次调用后到这次调用的时间间隔