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