python的time模块使用

        本章介绍python的时间模块 time的常用函数使用。time、datetime 和 calendar模块都是python在时间日期方面使用得最多的模块。而对于 time模块,用的最多的函数是这5个: time.sleep、time.time()、time.strftime、time.strptime 和 time.perf_counter() 。各种函数大家可以通过更改电脑的时间去测试,亲自去实践会更容易理解。

目录

1.  time.localtime()

2.  time.ctime()

3.  time.time()

4.  time.strftime()

5.  time.strptime()

6.  time.perf_counter()

7.  time.sleep()

8.  time.gmtime()

9.  time.asctime()

10.  time.mktime()

结尾


1
time.localtime()
获取本地时间。返回时间元组(按照系统设置的时区获取)
2
time.ctime()
获取本地时间(返回字符串,内容不符合中国人习惯)
3√
time.time()
获取当前时间戳
4√
time.strftime
把时间元组/元组转换成字符串
5√
time.strptime
把字符串格式转换成时间元组
6√
time.perf_counter()
用于开始/结束的计时
7√
time.sleep
设置睡眠时间
8
time.gmtime()
获取经度0°的时间,utc时区,返回时间元组(英国格林尼治时间)
9
time.asctime
获取指定时间的字符串。返回结果和time.ctime()格式一样,不符合中国人习惯
10
time.mktime
返回时间戳。(可指定时间)

1.  time.localtime(seconds)

        获取本地时间。返回时间元组(按照系统设置的时区获取)

import time
a = time.localtime()
print(a)

        当不输入seconds参数时,返回当前系统的时间;当输入seconds时,返回指定seconds的时间,seconds为时间戳,不能为负数。后续会详细介绍时间戳,或者看我 “时间戳” 篇更详细。

        现在的时间是2023年4月18日14点14分,在图1中可看出,time.localtime()输出了年月日时分秒,还有星期几(tm_wday +1)、处于一年中的第几天(tm_yday)、是否夏令时(tm_isdst)。

        因为电脑算 tm_wday是从0开始的,星期一为0,0为星期一,所以在 tm_wday基础上+1才是实际上的星期几。而经过测试(把电脑时间改成1月1日后运行发现),tm_yday是从1开始的,所以 tm_yday是正确的,无需+1。

        夏令时,目前中国不使用,0表示当前时间不是夏令时。这个概念最早诞生于欧洲,英国建筑师威廉·维莱特最早提出 “日光节约时间制” ,即提倡到晚上把时间 “拨” 快一小时,意识上人们就会早睡,减少照明量,从而节约更多能源。后经实行,每年节约6400万磅蜡烛。但是由于智能手机时代的到来,夏令时开始没落。中国在1986年也曾实行过一段时间的夏令时,但由于国情、智能化时代等原因,没有明显效果,到1992年,中国夏令时时代结束。

2.  time.ctime(seconds)

        获取本地时间(返回字符串,不太符合中国人习惯)

a = time.ctime()
print(a)

        当不输入seconds参数时,返回本地时间;当输入seconds时,返回指定seconds的时间,seconds为时间戳,不能为负数。后续会详细介绍时间戳,或者看我 “时间戳” 篇更详细。

        中国人的习惯是 年 月 日 时 分 秒 星期,但是返回的是 星期 月 日 时 分 秒 年。该函数很少用到,实在想要用它的,可以用.split()分隔把它提取。

3.  time.time()

        获取当前时间戳。

a = time.time()
print(a)

        时间戳,定义为从经度0°的英国格林尼治1970年1月1日0时0分0秒起算,到现在所经过的秒数。因为中国在东八区,比格林尼治早8个小时,当格林尼治0点时,中国已经是8点了,所以对于中国地区,时间戳就是从北京时间1970年1月1日8时0分0秒起算,到现在所经过的秒数。

        时间戳是有 “耗尽” 的一天的,按照32位的时间戳存储结构,它能正确表示的秒数最大为2147483647(2的31次方,第一位是符号位),即到英国格林尼治时间 2038年1月19日03:14:07秒,也就是北京时间 2038年1月19日11:14:07秒。届时所有32位的设备和32位的程序都会受到严重的影响。目前的办法是加速64位的普及,及时对32位设备和程序进行退役,减少经济损失。希望随着科技的日新月异,科学家们也能找到完美过渡内核溢出的方法。

扩展资料(来自百度百科-2038年问题):

        C语言中用 time_t 来代表时间和日期,python是基于母语C语言开发的。在32位系统上,time_t能表示的最大值为0x7ffffffff,当time_t取最大值时表示系统时间为2038-01-19 03:14:07,当时间再往后走时,由于32位整型溢出,时间将会被“绕回”(wrap around)成一个负数,变成了第 -2147483648 秒(代表格林尼治时间1901年12月13日20:45:52),造成应用程序发生严重的时间错误,而无法运行。

        对于服务器和最新电脑,已经换成了64系统操作系统,2038年时间戳的问题将不复存在。而对于嵌入式设备来说,现在还有大量32位系统在全球各地运行,谁也无法保证这些系统在2038年之前就能光荣退役。另外对于64位操作系统,上面还会运行着32位的应用程序,它的2038年问题一样对人们造成威胁,不可小视。

4.  time.strftime(format, tuple)

        把时间元组/元组转换成字符串。这两种形式我们分别实验:

        (1)把时间元组转换成字符串:

a = time.localtime()
b = time.strftime('%Y/%m/%d %H:%M:%S',a)        # 把时间元组转换成字符串
print(a)
print(b)
print(type(b))

        (2)把元组转换成字符串:

a = (2023,1,1,19,13,34,0,0,0)
b = time.strftime('%Y/%m/%d %H:%M:%S',a)        # 把元组转换成字符串
print(a)
print(b)
print(type(b))

        输入元组时,内容为9个元素,因为元组里分别对应 <年 月 日 时 分 秒 星期几 一年中第几天 是否夏令时> 这9个量的值,最后3位未知可填0,不填则会报错。

        %Y表示年,%m表示月,%d表示日,%H表示时,%M表示分,%S表示秒。中间可以用任意英文标点符号隔开,如 / : 空格等,但目前不支持中文及中文符号。

5.  time.strptime(string, format)

        把字符串格式转换成时间元组

a = '2023/4/18 19:37:56'
b = time.strptime(a,'%Y/%m/%d %H:%M:%S')
print(b)

        转成时间元组去查看指定时间是 <星期几> 或者 <一年中的第几天> 是不是很简单勒!

6.  time.perf_counter()

        用于开始/结束的计时。(计算某程序的运行要长时间)

a = time.perf_counter()

ss = 0
for i in range(1,100001):
    ss += i
print('1到100000的总和为:',ss)

b = time.perf_counter()
print('计算所用时间:',b-a)

        可见,计算1到100000的总和所需时间是0.008875秒,time.perf_counter()就是如此精确。

7.  time.sleep(seconds)

        设置睡眠时间,使程序暂停一段时间后再继续运行,不能为负数。

a = time.perf_counter()

ss = 0
for i in range(1,100001):
    ss += i
print('1到100000的总和为:',ss)

time.sleep(5)

b = time.perf_counter()
print('计算所用时间:',b-a)

        该程序运行到 time.sleep()时,暂停5秒后再继续执行下面的操作。该函数看似作用不大,但在爬虫领域,它的作用却不可无,暂停一段时间再爬,就不会给对方服务器造成太大压力。

8.  time.gmtime(seconds)

        获取经度0°的时间,utc时区,返回时间元组(即返回英国格林尼治时间)

a = time.gmtime()
print(a)

        目前时间为2023年4月18日20点12分,输出时间为2023年4月18日12点12分,足足少了8个小时。这是由于上面第3.我们说到的时差,英国格林尼治时间比中国所在的东八区时间晚8个小时,输出的正是英国格林尼治时间。

        参数seconds为时间戳,不能为负数,关于时间戳上面第3.也有详细解释。当不输入参数时,默认输出当前格林尼治时间;当输入指定时间戳时,输出指定时间戳的格林尼治时间,如:

a = time.gmtime(1686213456)
print(a)

        时间戳1686213456秒为英国格林尼治时间2023年6月8日37分36秒。若想要得到北京时间,+8小时即可。

9.  time.asctime(tuple)

        获取指定时间的字符串。返回结果和 time.ctime()格式一样,不符合中国人的使用习惯。

a = time.asctime()             # 和time.ctime()一样
print(a)

tup = (2023,5,19,11,22,45,0,0,0)
b = time.asctime(tup)
print(b)

        当不输入参数时,结果和 time.ctime()一样;当输入一个元组时,返回元组中的指定时间,元组和第4.一样,内容为9个元素,缺一报错。该函数用得比较少。

10.  time.mktime(tuple)

        返回指定时间的时间戳。可输入时间元组或元组。

a = time.localtime()              # 获得当前时间的时间元组
print(a)
b = time.mktime(a)               # 传入当前时间的时间元组
print(b)
tup = (2023,5,19,11,22,45,0,0,0)
c = time.mktime(tup)             # 传入元组
print(c)

        如b,获得当前时间的时间元组,和 time.time()一样;如c,获得指定时间的时间元组,元组的元素个数也需要是9个,缺一报错。

结尾

        time模块常用函数只有time.sleep、time.time()、time.strftime、time.strptime 和 time.perf_counter() ,其他几乎很少用到。然而,在time模块中,最不可或缺的只有睡眠time.sleep、时间戳time.time()和计时time.perf_counter(),因为其他几乎都是用datetime库更方便,或是同等方便,但首先想到的会是datetime,time占的 “股份”不太多,工作中使用的具体时间、日期与字符串的互相转换如下,其中dt为datetime.datetime:

该图片来源网络

猜你喜欢

转载自blog.csdn.net/m0_71559726/article/details/130219855
今日推荐