【python】time模块详解
文章目录
- 无参数函数
- 时区概念
- struct_time
- `time.strftime(format[, t])`
更多Python标准库内容: 刷完这60个标准库模块:没人比我更懂Python了
无参数函数
先解释一下时间戳,所谓时间戳,即自1970年1月1日00:00:00所经历的秒数,然后就可以理解下面的函数了。下面代码默认from time import *
以秒为单位 | 以纳秒为单位 | 功能 |
---|---|---|
time()
|
time_ns()
|
获取当前时间戳 |
thread_time()
|
thread_time_ns()
|
获取当前线程的CPU时间(不含休眠) |
thread_time()
|
thread_time_ns()
|
获取当前进程的CPU时间(不含休眠) |
monotonic()
|
monotonic_ns()
|
获取一个单调时钟的值 |
perf_counter()
|
perf_counter_ns()
|
获取一个计数器的值 |
上面五组函数中,只有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】time模块详解相关推荐
- python time模块详解
python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明 一.简 ...
- Python—requests模块详解
Python-requests模块详解 来源(博客园@小L小 ):Python-requests模块详解
- python re正则_正则表达式+Python re模块详解
正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns).它本质上是一个小巧的.高度专用的编程语言. 通 ...
- python cx_oracle模块详解_cx_Oracle模块详解
1.安装cx_Oracle模块 1-1.环境准备: 1-1-1.oracle client最小安装 instantclient-sqlplus-linux.x64-11.2.0.4.0 instant ...
- Python shutil 模块详解
Python shutil 模块详解 1.模块介绍 2.copytree 示例 3.move 示例 1.模块介绍 import shutil# copy data from file-like obj ...
- Python timeit 模块详解(准确测量小段代码的执行时间)
timeit 模块详解 -- 准确测量小段代码的执行时间 timeit 模块提供了测量 Python 小段代码执行时间的方法.它既可以在命令行界面直接使用,也可以通过导入模块进行调用.该模块灵活地避开 ...
- Python Tkinter模块详解(后续持续补充)
声明:该文章是个人学习中写的,目的是总结及当作工具参考,有一定的借鉴成分,后续若有新发现则补充 目录 Tkinter简介 创建组件基本语法 Tkinter组件汇总 Variable 类 常见参数详解 ...
- python pexpect模块详解_python pexpect原理详解及使用说明
pexpect是python中用于实现SSH,FTP,telnet等命令进行自动化交互,从而无需人工干预实现自动化运维的一个第三方扩展模块.理论的描述过于抽象,这里首先设想一下,如果让您设计一个实现自 ...
- python six模块详解_对python中的six.moves模块的下载函数urlretrieve详解
实验环境:windows 7,anaconda 3(python 3.5),tensorflow(gpu/cpu) 函数介绍:所用函数为six.moves下的urllib中的函数,调用如下urllib ...
- 【Python】模块详解/如何安装模块的方法
什么是模块 一.模块.包 ①模块 Python 模块(Module) 实质上就是一个python集成文件.它是用来组织代码的,包含了 Python 对象定义和Python语句,意思就是把python代 ...
最新文章
- Matlab数据的可视化 -- 三维特殊图形
- NBT:超高速细菌基因组检索技术
- 如何辨别二逼、文艺互联网公司?
- (转)C# Delegate.Invoke、Delegate.BeginInvoke
- CTFshow 信息收集 web4
- java setrotation_如何使用Java库将文档转换为横向模式?
- Emacs之LaTeX环境配置及效果展示
- Flurry调查报告:图片和视频应用增长速度最快
- python moviepy 音量_python moviepy 视频剪辑代码
- PHP用301重定向根域名到www域名
- 关于PCIe有gen1升到gen3的方法
- python123星号直角三角形_Python123:星号三角形、凯撒密码
- 辨析common 、ordinary、normal、usual、frequent以及general:
- 扔掉Windows 中的盗版软件,使用免费正版软件
- UML测试题(UML基础)
- Mac Tomcat安装 localhost 拒绝了我们的连接请求
- android 微信摇一摇代码,Android微信摇一摇
- Oracle 分析函数(Analytic Functions) 说明
- 【值得收藏】一份非常完整的Mysql规范
- PHP如何读取txt文档域名集,并且生成数组/随机显示一个
热门文章
- 变成[root@bogon ~]#的解决方法
- Typora 上传图片到 gitee
- 信息学与数学、奥数的关系
- linux下xampp的安装和配置文件,linux下xampp集成包安装配置方法
- 朝作猛虎行,暮作猛虎吟。C和C++的区别和联系
- cocos2dx-3.17.2 ---- xcode 14.0.1 项目移植
- 【ldap】ldap系列-java对ActiveDirectory的增删改查,包含加密密码字段:unicodePwd
- 【JAVA程序设计】(C00014)基于ssm的健身房管理系统
- 操作系统——互斥的定义及实现
- Specified class is an interface异常