Python的time模块随笔。

Python的time与datetime一直没有好好的深入记录过,今天想到了,先把time的一些基本功能记下来。

首先先上time.time与time.ctime:

time.time返回从1970年1月1日0:00到现在的过的时间总秒,类型为浮点型。

time.ctime([具体秒速])可以格式化为本地时间,用与秒速的时间切换最方便,短的时间也很方便。(默认按照计算机本地时区,可以添加负数,时间将减去)

In [139]: time.time()                                                                        
Out[139]: 1573369380.742141

In [140]: time.ctime(-20000)                                                                 
Out[140]: 'Thu Jan  1 02:26:40 1970'

In [141]: time.ctime(20000)                                                                  
Out[141]: 'Thu Jan  1 13:33:20 1970'

In [142]: time.ctime(-2220000)                                                               
Out[142]: 'Sat Dec  6 15:20:00 1969'

In [143]: time.ctime(0)                                                                      
Out[143]: 'Thu Jan  1 08:00:00 1970'

 time.monotonic用来计算相对时间,因为time.time读取的是计算机时间,如果计算机时间调整的化,会对相对时间差发生变化,该函数可以避免发生。

从时间精度来看,还是time.time的精度高。

import time
t1 = time.time()
tt1 = time.monotonic()
time.sleep(0.5)
t2 = time.time()
tt2 = time.monotonic()
print(t2 - t1)
print(tt2 - tt1)

# 0.5024559497833252
# 0.502452992

 time.perf_counter跟上面的monotonic实际我使用差不多,主要用于测试性能时测试,该函数具体运行出来的数值,只能用于比较计算,不能用于绝对时间。该函数时间精度与monotoni一样。

import time
t1 = time.time()
tt1 = time.monotonic()
ttt1 = time.perf_counter()
time.sleep(0.5)
t2 = time.time()
tt2 = time.monotonic()
ttt2 = time.perf_counter()

print(t2 - t1)
print(tt2 - tt1)
print(ttt2 - ttt1)

# 0.5030510425567627
# 0.503047529
# 0.503047695

time.gmtime:返回的为格林尼治0时区的时间元祖。里面可以填写浮点型数字,直接输出时间戳的时间元祖。

time.localtime:返回的为当地时区的时间元祖。

gmtime()或localtime() 返回的 表示时间的 元组或struct_time 转换成一个字符串,格式:'Sun Jun 20 23:21:051993'。如果没有传入参数t,则使用localtime()返回的时间作为t。asctime()不使用时区信息。

gmtime()或localtime() 返回的 表示时间的 元组或struct_time 转换成一个字符串,格式:'Sun Jun 20 23:21:051993'。如果没有传入参数t,则使用localtime()返回的时间作为t。asctime()不使用时区信息。

gm_time = time.gmtime(0)
local_time = time.localtime(0)
print(gm_time,local_time,sep= '\n')
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

参数tm_wday为星期几,从0开始星期一就是0,星期日为6t,tm_yday=1为一年中的第几天,m_isdst = 1 的时候表示时间是夏令时,值为0的时候表示非夏令时

time.mktime可以将时间元祖转换成时间戳, 而且不论是gmtime还是localtime不影响时间戳的值,前面的时间元祖还可以取值。

gm_time = time.gmtime()
local_time = time.localtime()
print(gm_time,local_time,sep= '\n')
# print(local_time-gm_time)
print(time.time())
print(time.mktime(gm_time))
print(time.mktime(local_time))
print('今天是{}年的第{}天,星期{}'.format(local_time.tm_year,local_time.tm_yday,local_time.tm_wday))
# 1573374826.792012
# 1573346026.0
# 1573374826.0
# 今天是2019年的第314天,星期6

 time.asctime与time.ctime不填写参数的时候输出相同,可以作为一种简单的时间字符串输出。

具体功能是将 gmtime()或localtime() 返回的 表示时间的 元组或struct_time 转换成一个字符串,格式:'Sun Jun 20 23:21:051993'。如果没有传入参数t,则使用localtime()返回的时间作为t。asctime()不使用时区信息。

简单概述就是ctime与asctime都是字符串输出,ctime由于字母少(便于记忆)里面参数填写浮点型的时间戳,asctime里面填写时间元祖(比如time.localtime())或者自己手动填写一个9位的元祖进去。

print(time.asctime((2010,1,1,1,1,1,1,1,1)))
print(time.asctime(time.gmtime()))
print(time.asctime(time.localtime()))
print('-' * 20)
print(time.ctime())
print(time.asctime())
print(time.ctime(9))
Tue Jan  1 01:01:01 2010
Sun Nov 10 09:02:51 2019
Sun Nov 10 17:02:51 2019
--------------------
Sun Nov 10 17:02:51 2019
Sun Nov 10 17:02:51 2019
Thu Jan  1 08:00:09 1970

 time.strftime是一个按照自己格式要求定制输出的字符串类型。里面两个参数,第一个位你想输出的日期格式(比如"%Y-%m-%d %H:%M:%S"),第二个为输出的正确日期的时间元祖。

Python中时间日期格式化符号:
指示     含义     笔记
%a     Locale的缩写工作日名称。     
%A     Locale的整个工作日名称。     
%b     语言环境的缩写月份名称。     
%B     Locale的完整月份名称。     
%c     语言环境的适当日期和时间表示。     
%d     一个十进制数字[01,31]。     
%H     小时(24小时制),十进制数[00,23]。     
%I     小时(12小时制)十进制数[01,12]。     
%j     一年中的十进制数[001,366]。     
%m     月为十进制数[01,12]。     
%M     以十进制数分钟[00,59]。     
%p     Locale相当于AM或PM。     (1)
%S     秒为十进制数[00,61]。     (2)
%U     年的星期数(星期日为星期的第一天)为十进制数[00,53]。在第一个星期日之前的新的一年的所有天被认为是在第0周。     (3)
%w     工作日为十进制数[0(星期日),6]。     
%W     年的星期数(星期一作为星期的第一天)作为十进制数[00,53]。在第一个星期一之前的新的一年中的所有天被认为是在第0周。     (3)
%x     语言环境的适当日期表示。     
%X     语言环境的适当时间表示。     
%y     年,无世纪作为十进制数[00,99]。     
%Y     年份以世纪为十进制数。     
%z     指示与+ HHMM或-HHMM形式的UTC / GMT的正或负时差的时区偏移,其中H表示十进制小时数字,M表示十进制分数字[-23:59,+23:59]。     
%Z     时区名称(如果没有时区,则不包含字符)。     
%%     字面值'%'字符。     

笔记:

    使用函数strptime() 时,如果指令%I用于hour, 指令%p仅影响输出的hour,
    范围真的是0到61;值60在表示闰秒的时间戳中有效,且历史原因支持值61。
    当与strptime()函数一起使用时,%U和%W仅在计算中使用星期和年份指定。

print(time.strftime('%Y年-%m月-%d日 %H时:%M分:%S秒英勇牺牲', time.localtime()))
# 2019年-11月-10日 17时:11分:57秒英勇牺牲

 里面的参数很多,记住常用的年费大写Y为4尾数,小写y为2尾数,月份m,日期d小写。

小时,分,秒,全部英文字符首字母大写。

time.strptime(string[, format]):按照格式format,解析表示时间的字符串string。返回值是struct_time类型,类似于gmtime()localtime()

我感觉这个我应该会用的不多。

参数format使用的指令与函数strftime()所使用的相同;默认使用"%a %b %d %H:%M:%S %Y",与ctime()返回的格式匹配。也可以手动指定格式。

 

print(time.strptime(time.ctime()))
print(time.strptime("30 Nov 00", "%d %b %y"))
time.struct_time(tm_year=2019, tm_mon=11, tm_mday=10, tm_hour=17, tm_min=25, tm_sec=38, tm_wday=6, tm_yday=314, tm_isdst=-1)
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)

在该函数里面如果参数少了,会填写默认参数。


差不多写到这里,有空把datetime也写一下。

time.tzname,time.tzset:因为需要读取系统的环境变量os.environ进行设置,等有需要的时候再进行学习操作。

参考链接:https://blog.csdn.net/ZZh1301051836/article/details/79013744

猜你喜欢

转载自www.cnblogs.com/sidianok/p/11831019.html