python:时间和日期之time模块

时间和日期

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)
"""

总结:

猜你喜欢

转载自blog.csdn.net/qq_39314932/article/details/81638454