表格梳理解析python内置时间模块看完就懂
作者:微小冷 发布时间:2023-10-21 08:10:27
无参数函数
先解释一下时间戳,所谓时间戳,即自1970年1月1日00:00:00所经历的秒数,然后就可以理解下面的函数了。下面代码默认
from time import *
implementation | monotonic | adjustable | resolution | |
---|---|---|---|---|
'time' | GetSystemTimeAsFileTime() | False | True | 0.015625 |
'thread_time' | GetThreadTimes() | True | False | 1e-07 |
'process_time' | GetProcessTimes() | True | False | 1e-07 |
'monotonic' | GetTickCount64() | True | False | 0.015625 |
'perf_counter' | QueryPerformanceCounter() | True | False | 1e-07 |
上面五组函数中,只有time.time()的值具有绝对的意义,其他值都只具有相对的意义。
通过get_clock_info函数可以查看这些时钟的特性,其输入输出分别为
implementation | monotonic | adjustable | resolution | |
---|---|---|---|---|
'time' | GetSystemTimeAsFileTime() | False | True | 0.015625 |
'thread_time' | GetThreadTimes() | True | False | 1e-07 |
'process_time' | GetProcessTimes() | True | False | 1e-07 |
'monotonic' | GetTickCount64() | True | False | 0.015625 |
'perf_counter' | QueryPerformanceCounter() | True | False | 1e-07 |
其中,
如果时钟可以自动更改或由系统管理员手动更改,则adjustable为True,否则为False。
implementation表示用于获取时钟值的基础C函数的名称。
如果时钟不能倒退,则monotonic为 True,否则为 False 。
resolution表示以秒为单位的时钟分辨率。
接下来可以测试一下这些时钟的特性。
>>> def test(n):
... aTime = time.time()
... aTh = time.thread_time()
... aPr = time.process_time()
... aMo = time.monotonic()
... aPe = time.perf_counter()
... for i in range(int(n)): j = i**2
... bTime = time.time()
... bTh = time.thread_time()
... bPr = time.process_time()
... bMo = time.monotonic()
... bPe = time.perf_counter()
... aStr = f'aTime={aTime},aTh={aTh},aPr={aPr},aMo={aMo},aPe={aPe}\n'
... bStr = f'bTime={bTime},bTh={bTh},bPr={bPr},bMo={bMo},bPe={bPe}'
... print(aStr+bStr)
...
>>> test(1e6)
aTime=1634625786.136904,aTh=0.03125,aPr=0.03125,aMo=199082.078,aPe=199085.4751224
bTime=1634625786.340363,bTh=0.234375,bPr=0.234375,bMo=199082.281,bPe=199085.6787309
>>> test(1e6)
aTime=1634625789.7817287,aTh=0.234375,aPr=0.234375,aMo=199085.734,aPe=199089.1195357
bTime=1634625789.981198,bTh=0.421875,bPr=0.421875,bMo=199085.921,bPe=199089.3195721
>>> test(1e6)
aTime=1634625796.3934195,aTh=0.421875,aPr=0.421875,aMo=199092.343,aPe=199095.731209
bTime=1634625796.5789576,bTh=0.609375,bPr=0.609375,bMo=199092.531,bPe=199095.9172852
>>>
可清晰地看到,在调用test
的间隔中,thread_time
和process_time
并未发生变化,即二者不计算线程或者进程休眠时的时间。
一般在time
模块中,最常用的两个函数分别是time.time()
和time.sleep()
,前者用于获取时间戳,从而统计程序运行时长;后者则可以暂停线程。
可以通过time.thread_time()
来检测sleep
函数的功能
>>> def test(n):
... aTime = time.time()
... aTh = time.thread_time()
... aPr = time.process_time()
... time.sleep(n)
... bTime = time.time()
... bTh = time.thread_time()
... bPr = time.process_time()
... aStr = f'aTime={aTime},aTh={aTh},aPr={aPr}\n'
... bStr = f'bTime={bTime},bTh={bTh},bPr={bPr}'
... print(aStr+bStr)
...
>>> test(1)
aTime=1634649370.2819958,aTh=0.640625,aPr=0.640625
bTime=1634649371.2862759,bTh=0.640625,bPr=0.640625
>>> test(1)
aTime=1634649372.72013,aTh=0.640625,aPr=0.640625
bTime=1634649373.723695,bTh=0.640625,bPr=0.640625
>>> test(1)
时区概念
接下来需要介绍一些有关时间的概念
GMT
:即格林威治标准时间。
UTC
:世界协调时间,比格林威治更精确。
DST
:D即Daylight,表示夏令时。
CST
:美国、澳大利亚、中国、古巴的标准时间。
知道这些时区的概念之后,就能理解time
中的常量:
常量 | altzone | daylight | tzname | timezone |
---|---|---|---|---|
时区偏移 | 如未定义非DST时区,则为0 | 时区名称 | 本地时区偏移 |
struct_time
为了更好地表示时间,time
中封装了struct_time
类,其成员包括
索引 | 属性 | 值 | 含义 |
---|---|---|---|
0 | tm_year | 正整数 | 年 |
1 | tm_mon | range [1, 12] | 月 |
2 | tm_mday | range [1, 31] | 月中的日期 |
3 | tm_hour | range [0, 23] | 时 |
4 | tm_min | range [0, 59] | 分 |
5 | tm_sec | range [0, 61] | 秒 |
6 | tm_wday | range [0, 6],周一为 0 | 星期即 |
7 | tm_yday | range [1, 366] | 在一年中的第几天 |
8 | tm_isdst | 0, 1 或 -1 | 是否为DST |
- | tm_zone | 时区名称的缩写 | |
- | tm_gmtoff | 以秒为单位的UTC以东偏离 |
在了解struct_time这一数据结构之后,就能读懂下列函数。
单参函数 | |
---|---|
gmtime(secs) | 将时间戳转化为UTC时间[struct_time格式] |
localtime(secs) | 将戳转化为本地时间[struct_time格式] |
ctime(secs) | 将时间戳转化为UTC时间字符串 |
asctime(secs) | 将时间结构体转化为本地时间字符串 |
mktime | localtime的反函数,将struct_time转为秒数 |
time.strftime(format[, t])
可以将struct_time
通过匹配符进行格式化输出,其转换格式为
名称 | 含意 | 名称 | 含意 |
---|---|---|---|
%a | 星期的缩写 | %A | 星期的名称 |
%b | 月份缩写 | %B | 月份名称 |
%c | 适当的日期和时间表示 | ||
%d | 月中日,范围[01,31] | %j | 年中日,范围[001,366] |
%H | 小时,范围[00,23] | %I | 小时,范围[01,12] |
%M | 分钟,范围[00,59] | %S | 秒,范围[00,61] |
%p | AM 或 PM | ||
%m | 月份,范围[01,12] | ||
%U | 年中周数,范围[00,53] 周日作为第一天 | %W | 同左,周一作为第一天 |
%w | 周中日,范围[0(星期日),6] | ||
%x | 适当的日期表示 | %X | 适当的时间表示 |
%y | 无世纪年份,范围[00,99] | %Y | 带世纪的年份 |
%z | 时区偏移 | ||
%Z | 时区名称 | ||
%% | 字面的 ‘%' 字符。 |
strptime()
为其反函数。
例如
>>> t = time.strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
>>> t
'Tue, 19 Oct 2021 13:46:37 +0000'
>>> T = time.strptime(t,"%a, %d %b %Y %H:%M:%S +0000")
>>> T
time.struct_time(tm_year=2021, tm_mon=10, tm_mday=19, tm_hour=13, tm_min=46, tm_sec=37, tm_wday=1, tm_yday=292, tm_isdst=-1)
以上就是表格梳理解析python内置时间模块看完就懂的详细内容
来源:https://blog.csdn.net/m0_37816922/article/details/120856405
猜你喜欢
- python实现阶乘-基础版本什么是阶乘呢?在数学运算中n!表示n的阶乘,用数学公式表示为:n!=1*2*3*....*(n-1)*n下面提
- 是在客户端确认还是在服务器端确认? <SCRIPT LANGUAGE="VBSc
- 我插入Mysql5的中文一直是乱码。但是直接使用mysqlAdmin,EMS等工具插入DB就不是乱码。而且我还可以使用程序正常地读出来。原因
- 听说 FaceBook 开放其网站的代码了,期前也算是了解过 FaceBook 的架构,所以重点就是看其代码的质量。可以毫不夸张的说,Fac
- 远程连接access数据库的几个方法: 1.建立VPN(Virtual Private Network),这样你的电脑和主机的连接
- 创建用户定义函数,它是返回值的已保存的 Transact-SQL 例程。用户定义函数不能用于执行一组修改全局数据库状态的操作。与系统函数一样
- 一、问题引发思考前阵子与同事探讨一个小需求时又遇到了按钮表示“动作”和表示“状态”间矛盾问题。想想这个问题多年前已经开始讨论了,所以在此整理
- Web标准的web UI——来源、谬误与个人理解序我从2004年末开始接触web标准,2005年5月正式采取完全的web标准方式的网页制作,
- 这篇博客将介绍如何使用Python,Opencv进行二维直方图的计算及绘制(分别用Opencv和Numpy计算),二维直方图可以让我们对不同
- 在风起云涌的互联网浪潮中,产品迭代的速度越来越快。随着用户需求的激增,也不断带来了对设计师能力要求的提高。初入交互设计领域几年来,明显发现可
- 因为一个需求,因为自己想多了一点东西,最后发现了一个问题,一个很奇怪的问题。这个问题我想还是我自己当初想法上的出路导致的吧,但想不通为什么会
- 本文实例讲述了JS实现仿Windows经典风格的选项卡Tab切换代码。分享给大家供大家参考,具体如下:这款仿Windows风格的选项卡,带有
- 关于asp随机数的相关文章:asp生成一个不重复的随机数字 8个asp生成随机字符的函数 <html> <me
- 动态变量名赋值在使用 tkinter 时需要动态生成变量,如动态生成 var1...var10 变量。使用 exec 动态赋值exec 在
- 确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外
- 多表查询1. 增删改一对多:先一后多,外键可以为对象或依赖表的主键(publish and book)publish = Publish.o
- 新搞了台linux云主机,瞎折腾折腾,先装个Python3。Linux环境下有其他软件需要Python2,如YUM,所以安装的Python3
- 阅读上一篇:网马解密大讲堂——网马解密初级篇今天主要讲解的内容是Freshow工具的使用方法,工欲善其事,必先利其器,首先要学会如何使用解密
- Javascript 选择器(selector engine)似乎从 jQuery 流行以来就大行其道,改变了原有 Javascript 选
- 我一直使用Microsoft的FrontPage 98来开发ASP/ADO之类的Internet数据库应用程序。现在我听说许多人都非常信奉采