时间和日期
1、在python中,与时间处理有关的模块包括time、datetime、calendar
2、在python中,通常用时间戳、格式化的时间字符串和元组3种方式来表示时间,时间间隔是以秒为单位的浮点小数。
时间戳:
1、通常,时间戳表示从1970年1月1日00时00分00秒开始按秒计算的偏移量,也就是从1970年1月1日00时00分00秒(北京时间1970年1月1日08时00分00秒)起到现在的总秒数。它也被称为 Unix 时间戳(Unix Timestamp)。时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间。
2、python3.5中支持最大时间戳为32535244799(3001-01-01 15:59:59)
时间戳(time-stamp)是一个经加密后形成的凭证文档,它包括三个部分:
1、需加时间戳的文件的摘要(digest);
2、DTS收到文件的日期和时间;
3、DTS的数字签名
一般来说,时间戳产生的过程为:用户首先将需要加时间戳的文件用Hash编码加密形成摘要,然后将该摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户。书面签署文件的时间是由签署人自己写上的,而数字时间戳则不然,它是由认证单位DTS来加的,以DTS收到文件的时间为依据。
时间格式化符号:
在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 秒(01-61)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 一年中的第几天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 一个星期中的第几天(0-6),星期天为星期的开始,0是星期天
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
说明:
1、%P只有与%I配合使用才有效果
2、文档中强调确实是0-61,而不是56,闰年秒占两秒
3、当使用strptime()函数时,只有这一年的周数和天数确定时%U和%W才会被计算
时间元组(struct_time)
struct_time元组共有9个元素:年、月、日、时、分、秒、一年中第几周、一年中第几天、是否为夏令时(默认为-1)
time模块
time()函数:
1、time( )函数用于返回当前时间的时间戳(从1970年1月1日00时00分00秒到现在的浮点秒数)
2、time()函数的语法如下:
time.time()
1、此语法中第一个time表示time模块,该函数不需要传递参数
2、返回值:返回当前时间的时间戳
例1:
import time
print("当前时间的时间戳为:",time.time())
#上面代码的输出结果为:当前时间的时间戳为: 1534051933.1078024
localtime([secs])函数:
1、time.localtime( )函数的作用是格式化时间戳为本地时间(struct_time类型)。如果secs参数未传入,就以当前时间为转换标准
2、以下为 localtime() 方法的语法:
time.localtime([ secs ])
1、参数secs -- 指转换为time.struct_time类型的对象的秒数
2、返回值:该函数无任何返回值
例2:
import time
print ("time.localtime() : %s" , time.localtime())
print ("time.localtime() : %s" , time.localtime(1455508609.34375))
"""
上面代码的输出结果为:
time.localtime() : %s time.struct_time(tm_year=2018, tm_mon=8, tm_mday=12, tm_hour=13, tm_min=43, tm_sec=51, tm_wday=6, tm_yday=224, tm_isdst=0)
time.localtime() : %s time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=11, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)
"""
gmtime([secs])函数:
1、gmtime( )函数用于将一个时间戳转换为UTC时区(0时区)的struct_time。可选参数secs表示从1970-1-1到现在的秒数,无参数时默认为本地时间
2、函数返回time.struct_time类型的对象(struct_time是在time模块中定义的表示时间的对象)
3、gmtime([secs])的语法如下:
time.gmtime([secs])
1、参数secs -- 指转换为time.struct_time类型的对象的秒数
2、返回值:该函数无任何返回值
例3:
import time
print ("time.localtime() : %s" , time.gmtime())
print ("time.localtime() : %s" , time.gmtime(1455508609.34375))
"""
上面代码的输出结果为:
time.localtime() : %s time.struct_time(tm_year=2018, tm_mon=8, tm_mday=12, tm_hour=5, tm_min=57, tm_sec=53, tm_wday=6, tm_yday=224, tm_isdst=0)
time.localtime() : %s time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=3, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)
"""
mktime(tupletime)函数:
1、mktime( )函数用于执行与gmtime()、localtime()相反的操作,接收struct_time对象作为参数,返回用秒数表示时间的浮点数。如果输入的值不是合法时间,就会触发OverflowError或ValueError
2、以下是 mktime()方法的语法:
time.mktime(t)
1、参数t -- 这是struct_time(结构化时间)或全满9个元素的元组。
2、返回值:该方法返回一个浮点数,为了兼容time()函数。
例4:
import time
t = (2016, 2, 15, 10, 13, 38, 1, 48, 0)
d=time.mktime(t)
print ("time.mktime(t) : %f" % d)
#上面函数的输出结果为:time.mktime(t) : 1455502418.000000
asctime([tupletime])函数:
1、该函数用于接收一个时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串。
2、以下是asctime() 方法的语法:
time.asctime([t]))
1、参数t -- 完整的9位元组元素或struct_time表示,由gmtime()和localtime()函数返回的时间的元组。
2、返回值:此方法返回以下形式的24个字符的字符串: 'Tue Feb 17 23:21:05 2009'.
例5:
import time
t = time.localtime()
d = (2018,8,8,12,14,22,20,0,1)
print ("asctime :",time.asctime(t))
print ("asctime : ",time.asctime(d))
"""
上面代码的输出结果为:
asctime : Sun Aug 12 14:23:58 2018
asctime : Sun Aug 8 12:14:22 2018
"""
ctime([secs])函数:
1、用于把一个时间戳转换为time.asctime()的形式,作用相当于asctime(localtime(secs))。如果未给参数或参数为None,就会默认将time.time()作为参数。
2、下面是ctime()方法的语法:
time.ctime([ sec ])
1、参数sec -- 这是将被转换成字符串表示的秒数。
2、返回值:此方法不返回任何值。
例6:
import time
t = 1455502418.000000
print ("ctime : ", time.ctime()) #本地时间
print ("ctime : ", time.ctime(t))
"""
上面代码的输出结果为
ctime : Sun Aug 12 14:42:07 2018
ctime : Mon Feb 15 10:13:38 2016
"""
sleep(secs)函数:
1、sleep()函数用于推迟调用线程的运行,可通过参数secs指定进程挂起的时间
2、以下是sleep()方法的语法:
time.sleep(t)
1、参数t -- 这是要暂停执行的秒数。
2、返回值:此方法不返回任何值。
例7:
import time
print ("Start : %s" % time.ctime())
time.sleep( 5 )
#等待5秒后再继续执行下面的代码
print ("End : %s" % time.ctime())
"""
上面代码的输出结果为:
Start : Sun Aug 12 15:14:28 2018
End : Sun Aug 12 15:14:33 2018
"""
clock()函数:
1、clock()函数用于以浮点数计算的秒数返回当前的CPU(处理器)时间。用来衡量不同程序的耗时,比time.time()更有用。
2、这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是"进程时间"(unix系统始终返回全部运行时间),它是用秒表示的浮点数(时间戳)。而在Windows中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间.
3、以下为clock()方法语法:
time.clock()
参数:无
返回值:在win32系统下,这个函数返回的是真实时间(wall time),而在Unix/Linux下返回的是CPU时间。
该函数有两个功能:
1、在第一次调用的时候,返回的是程序运行的实际时间;
2、第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔例8:
import time
def procedure():
time.sleep(2)
# time.clock:测试处理时间
t0 = time.clock()
procedure()
print ("第二次调用时间:",time.clock() - t0)
# time.time:测试真实时间
t1 = time.time()
procedure()
print ("第二次调用时间:",time.time() - t1)
"""
上面代码的输出结果为:
第二次调用时间: 1.9998990422838558
第二次调用时间: 2.000291585922241
"""
备注:
疑问:按我的理解,在第二次使用time.clock()的时候得到的值本来就是两次使用该函数的间隔,即程序运行时间,为什么还需要减去t0呢?
回答:clock()在win下返回相对于首次调用clock()时的时差。多次调用clock()后也都返回针对第一次调用的时差这里的time.clock() - t0减法是想求得 procedure()的执行时长,就是求第n次和第n+1次调用clock()之间的时差,而不是针对首次调用。python3.3版后推荐用time.perf_counter() 来测量执行时间
strftime(format[,tupletime])函数:
1、strftime()方法用于接收一个9位元素的时间元组或用struct_time表示的时间元组,并返回以可读字符串表示的当地时间。格式由format参数决定
2、strftime()只能接受struct_time类型的参数,若提供的是9位元素的时间元组,则需要将其转化为时间戳再转化为struct_time类型的时间元组
3、如果不提供tupletime,则默认使用localtime()函数返回的当前时间。格式必须是字符串。如果tupletime的任何字段在允许的范围之外,那么异常ValueError将会被引发。
4、以下是 strftime()方法的语法:
time.strftime(format[,tupletime])
1、参数tupletime -- 这是要被格式化以秒为单位的时间,为一个可选参数。
2、参数format -- 这将用于格式化给定时间的指令。
3、返回值:返回以可读字符串表示的当地时间
例9:
import time
t = (2018, 12, 30, 10, 39, 45, 1, 48, 0)
t = time.mktime(t) #将9位时间元组转换成时间戳
t = time.localtime(t) #将时间戳转换为struct_time元组类型
print (time.strftime("%Y %b %d %H:%M:%S", t))
#上面代码的输出结果为:2018 Dec 30 10:39:45
备注:时间戳不能直接转换成字符串类型,需要先转换为struct_time类型再转换为字符串类型例9_1:
import time
t = time.gmtime() #直接转换本地时间(为0时区的时间)
print (time.strftime(" %b %d %Y %H:%M:%S", t))
#上面代码的输出结果为:Aug 12 2018 08:10:58
strptime(str,format='%a %b %d %H:%M:%S %Y')
1、strptime( )函数用于根据format的格式把一个时间字符串解析为时间元组。2、以下为该函数的语法:
strptime(str,format='%a %b %d %H:%M:%S %Y')
1、参数:
str -- 时间字符串
format -- 指格式化字符串
2、返回值:返回struct_time对象
例10:
import time
struct_time = time.strptime("30 Nov 00", "%d %b %y")
print("返回元组: ", struct_time)
"""
上面代码的输出结果为:
返回元组: time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
"""