python工具模块介绍之time 时间访问和转换的示例代码
作者:磁石空杯 发布时间:2023-11-08 08:02:14
快速入门
In [1]: import time
# 获取当前时间
In [25]: time.strftime("%Y-%m-%d_%H-%M-%S", time.localtime())
Out[25]: '2018-06-17_20-05-36'
# 停顿0.5秒
In [26]: time.sleep(0.5)
简介
功能:时间访问和转换。
相关模块:
datetime 标准模块。
calendar 标准模块。
下面介绍一些术语和约定:
epoch是时间开始点。对于Unix ,时代是1970年1月1日0点。通过time.gmtime(0)可以查看时间的起点:
In [1]: import time
In [2]: time.gmtime(0)
Out[2]: 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)
In [3]: time.gmtime(time.time() + 786041553) # 32位会报错
Out[3]: time.struct_time(tm_year=2043, tm_mon=5, tm_mday=8, tm_hour=6, tm_min=26, tm_sec=50, tm_wday=4, tm_yday=128, tm_isdst=0)
对于32位的linux系统,时间只能处理到2038年。现在新发布的主流已经全部是64位版本。
UTC是协调世界时(前身为格林威治标准时间或GMT)。
DST为夏令时,通常是根据当地法律在一年内的部分时间进行一小时的调整。 C库包含有当地规则的表。
实时函数的精度可能比建议的要低。例如在大多数Unix系统中,时钟“滴答”只有50或100次每秒。
不过time()和sleep()比Unix的更好:时间为浮点数,time()的返回确保最精确(尽量使用Unix的函数gettimeofday()) ,sleep()接受的时间为非零分数(尽量用select()实现) 。
gmtime(), localtime()和strptime()的返回是包含9个整数的序列,可以作为asctime(), mktime() and strftime()的输入,每个域都有自己的属性,实际上是一个结构体struct_time,参见上面的例子。
时间转换:gmtime()把浮点时间转为UTC的struct_time,反之calendar.timegm();localtime()把浮点时间转为local的struct_time,反之mktime()。实际上calendar.timegm()和mktime()是等效的,不过前者返回整数,后者返回浮点数。
时间生成与转换
生成epoch的浮点数,注意不同的系统精度不同,linux一般是小数点后面7为,windows一般是小数点后3位。Time函数是没有参数的。可以直接对返回的浮点数进行计算。
gmtime([secs])把浮点时间转为UTC的struct_time,如果无输入参数为空会调用time()读取当前时间。
gmtime显示的是世界协调时间, localtime([secs])可以显示本地时间。
注意夏时制要设置dst。asctime([t])显示时间为可读性好的格式,它把gmtime(), localtime()和strptime()的返回的struct_time类型转换为可读性较好的格式。如果输入参数为空则调用localtime()的返回结果。它和c函数不同的地方是末尾不会添加换行。asctime不会使用Locale信息。
ctime([secs])在asctime上更进一步,转换浮点数为可读性较好的格式,相当于asctime(localtime(secs)), 这个功能很常用。ctime不会使用Locale信息。
In [1]: import time
In [2]: time.gmtime(0)
Out[2]: 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)
In [3]: time.gmtime(time.time() + 786041553)
Out[3]: time.struct_time(tm_year=2043, tm_mon=5, tm_mday=8, tm_hour=6, tm_min=26, tm_sec=50, tm_wday=4, tm_yday=128, tm_isdst=0)
In [4]: time.time()
Out[4]: 1528637996.277831
In [5]: time.gmtime()
Out[5]: time.struct_time(tm_year=2018, tm_mon=6, tm_mday=10, tm_hour=13, tm_min=42, tm_sec=47, tm_wday=6, tm_yday=161, tm_isdst=0)
In [6]: time.localtime()
Out[6]: time.struct_time(tm_year=2018, tm_mon=6, tm_mday=10, tm_hour=21, tm_min=43, tm_sec=54, tm_wday=6, tm_yday=161, tm_isdst=0)
In [7]: time.asctime()
Out[7]: 'Sun Jun 10 22:10:14 2018'
In [8]: time.ctime()
Out[8]: 'Sun Jun 10 22:12:25 2018'
Sleep
sleep(secs)暂停执行指定秒数。参数可以是整数或浮点数。实际的中止时间可能小于请求时间,因为例行的信号捕捉可能终止sleep。此外中止时间可能长于请求时间,因为因为系统调度也是需要时间的。
In [36]: time.sleep(3)
处理器时间
clock()在Unix上,返回当前的处理器时间,为以秒表示的浮点数。精度决于同名的C函数,通常用于基准Python或定时的算法。我们书写一个不耗cpu和耗cpu的脚本对比:
import time
template = '{} - {:0.2f} - {:0.2f}'
print(template.format(
time.ctime(), time.time(), time.clock())
)
for i in range(3, 0, -1):
print('Sleeping', i)
time.sleep(i)
print(template.format(
time.ctime(), time.time(), time.clock())
)
执行结果:
$ python3 time_clock_sleep.py
Mon Jun 18 01:27:52 2018 - 1529256472.83 - 0.05
Sleeping 3
Mon Jun 18 01:27:55 2018 - 1529256475.83 - 0.05
Sleeping 2
Mon Jun 18 01:27:57 2018 - 1529256477.83 - 0.05
Sleeping 1
Mon Jun 18 01:27:58 2018 - 1529256478.83 - 0.05
import hashlib
import time
# Data to use to calculate md5 checksums
data = open(__file__, 'rb').read()
for i in range(5):
h = hashlib.sha1()
print(time.ctime(), ': {:0.3f} {:0.3f}'.format(
time.time(), time.clock()))
for i in range(300000):
h.update(data)
cksum = h.digest()
执行结果:
$ python3 time_clock.py
Mon Jun 18 01:31:35 2018 : 1529256695.695 0.048
Mon Jun 18 01:31:36 2018 : 1529256696.166 0.519
Mon Jun 18 01:31:36 2018 : 1529256696.635 0.987
Mon Jun 18 01:31:37 2018 : 1529256697.110 1.461
Mon Jun 18 01:31:37 2018 : 1529256697.587 1.936
struct_time类
struct_time是的命名元组,结构如下:
| 索引(Index) | 属性(Attribute) | 值(Values) |
| 0 | tm_year(年 | 比如2013 |
| 1 | tm_mon(月) | 1 - 12 |
| 2 | tm_mday(日) | 1 - 31 |
| 3 | tm_hour(时) | 0 - 23 |
| 4 | tm_min(分) | 0 - 59 |
| 5 | tm_sec(秒) | 0 - 61 |
| 6 | tm_wday(weekday | 0 - 6(0表示周日 |
| 7 | tm_yday(一年中的第几天) | 1 - 366 |
| 8 | tm_isdst(是否是夏令时) | 默认为-1 |
import timedef show_struct(s):
print ' tm_year :', s.tm_year print ' tm_mon :', s.tm_mon print ' tm_mday :', s.tm_mday print ' tm_hour :', s.tm_hour print ' tm_min :', s.tm_min print ' tm_sec :', s.tm_sec print ' tm_wday :', s.tm_wday print ' tm_yday :', s.tm_yday print ' tm_isdst:', s.tm_isdstprint 'gmtime:'show_struct(time.gmtime())print '\nlocaltime:'show_struct(time.localtime())print '\nmktime:', time.mktime(time.localtime())
执行结果:
$ python3 time_struct.py
gmtime:
tm_year : 2018
tm_mon : 6
tm_mday : 17
tm_hour : 17
tm_min : 32
tm_sec : 54
tm_wday : 6
tm_yday : 168
tm_isdst: 0localtime:
tm_year : 2018
tm_mon : 6
tm_mday : 18
tm_hour : 1
tm_min : 32
tm_sec : 54
tm_wday : 0
tm_yday : 169
tm_isdst: 0mktime: 1529256774.0
参考资料
参考资料
python好书下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
https://docs.python.org/3/library/time.html
https://pymotw.com/3/time/index.html
http://effbot.org/librarybook/time.htm
代码地址
时区
重置库函数的时间转换规则。实际上是修改环境变量TZ,python 2.3以后类linux支持该功能,这个功能相对不是那么常用。TZ环境变量的格式如下:
std offset [dst [offset [,start[/time], end[/time]]]]
STD和DST为时区缩写。hh[:mm[:ss]],表示加上这个时间可以得到UTC时间。偏移量的形式为: HH [ : MM [ : SS] ],夏时制增加1小时。
starttime, endtime表示使用夏时制的区间。time和偏移类似,默认时间是02:00:00。比如:
In [1]: import os
In [2]: import time
In [3]: os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0'
In [4]: time.tzset()
In [5]: time.strftime('%X %x %Z')
Out[5]: '13:38:26 06/17/18 EDT'
In [6]: os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
In [7]: time.tzset()
In [8]: time.strftime('%X %x %Z')
Out[8]: '03:38:46 06/18/18 AEST'
在许多Unix系统(包括* BSD,Linux和Solaris,和Darwin),使用系统时区数据库更方便。
In [9]: os.environ['TZ'] = 'US/Eastern'
In [10]: time.tzset()
In [11]: time.tzname
Out[11]: ('EST', 'EDT')
In [12]: os.environ['TZ'] = 'Egypt'
In [13]: time.tzset()
In [14]: ('EET', 'EEST')
Out[14]: ('EET', 'EEST')
另一实例:
import time
import os
def show_zone_info():
print ' TZ :', os.environ.get('TZ', '(not set)')
print ' tzname:', time.tzname print ' Zone : %d (%d)' % (time.timezone,
(time.timezone / 3600))
print ' DST :', time.daylight print ' Time :', time.ctime()
printprint 'Default :'show_zone_info()ZONES = [ 'GMT',
'Europe/Amsterdam',
]for zone in ZONES:
os.environ['TZ'] = zone
time.tzset()
print zone, ':'
show_zone_info()
执行结果:
$ python3 time_timezone.py
Default :
TZ : (not set)
tzname: ('CST', 'CST')
Zone : -28800 (-8.0)
DST : 0
Time : Mon Jun 18 01:40:39 2018
GMT :
TZ : GMT
tzname: ('GMT', 'GMT')
Zone : 0 (0.0)
DST : 0
Time : Sun Jun 17 17:40:39 2018
Europe/Amsterdam :
TZ : Europe/Amsterdam
tzname: ('CET', 'CEST')
Zone : -3600 (-1.0)
DST : 1
Time : Sun Jun 17 19:40:39 2018
格式化
time.strftime(format[, t]):把一个代表时间的元组或者struct_tim转为格式化的时间字符串。如果t未指定,将调用time.localtime()的返回作为输入。如果输入中任何一个元素越界将报ValueError异常。格式化参数如下:
格式 | 含义 | 备注 |
---|---|---|
%a | 本地简化星期名 | |
%A | 本地完整星期名 | |
%b | 本地简化月份名 | |
%B | 本地完整月份名称 | |
%c | 本地相应的日期和时间表示 | |
%d | 日期(01 - 31) | |
%H | 小时(24小时制,00 - 23) | |
%I | 小时(12小时制,01 - 12) | |
%j | 天数(基于年)(001 - 366) | |
%m | 月份(01 - 12) | |
%M | 分钟(00 - 59) | |
%p | 显示am或pm的标识 | |
%S | 秒(01 - 61) | |
%U | 周数(基于年)(00 – 53周日是星期的开始。)第一个周日之前的所有天数都放在第0周。 | |
%w | 星期中的天数(0 - 6,0是星期天) | |
%W | 和%U基本相同,以星期一为星期的开始。 | |
%x | 本地相应日期表示 | |
%X | 本地相应时间表示 | |
%y | 去掉世纪的年份(00 - 99) | |
%Y | 完整的年份 | |
%Z | 时区的名字(如果不存在为空字符) | |
%% | '%’字符 |
备注:
“%p”只有与“%I”配合使用才有效果。
秒是0 - 61,而不是59,以处理闰秒和双闰秒。
当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%U和%W才会被计算。
比如:
In [15]: time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())
Out[15]: 'Sun, 17 Jun 2018 17:44:12 +0000'
下面方式在给文件名等添加时间戳比较有用:
In [17]: time.strftime("%Y-%m-%d_%H:%M:%S", time.gmtime())
Out[17]: '2018-06-17_17:46:18'
显示格式可能因系统而又不同的差异。
time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作,参数参见strftime。Format默认为"%a %b %d %H:%M:%S %Y",和ctime的返回格式一致,没有提供的值会采用默认值(1900, 1, 1, 0, 0, 0, 0, 1, -1)。
In [19]: time.strptime("30 Nov 18", "%d %b %y")
...:
Out[19]: time.struct_time(tm_year=2018, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=334, tm_isdst=-1)
其他
altzone属性查看当前夏时制时间的偏移。daylight属性查看是否使用了夏时制。timezone查看当前时区的偏移。Tzname返回本地时区和夏时制对应的时区。
In [3]: time.altzone
Out[3]: -28800
In [4]: time.daylight
Out[4]: 0
In [5]: time.timezone
Out[5]: -28800
In [6]: time.tzname
Out[6]: ('CST', 'CST')
来源:https://www.cnblogs.com/testing-/p/17349367.html


猜你喜欢
- ACCESS2000文件用ACCESS2007打开,并迁移到SQLSERVER2005里 打开ACCESS2007的数据库工具方法
- centos7之Python3.74安装安装版本:Python3.74系统版本:centos7系统默认安装Python2.7,保留。安装/u
- 1. 表示操作成功,文字上方会显示一个表示操作成功的图标。wx.showToast({ title: '操作成功!
- 这篇文章主要介绍了Python计算不规则图形面积算法实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 最简单的方法当然可以直接print(net),但是这样网络比较复杂的时候效果不太好,看着比较乱;以前使用caffe的时候有一个网站可以在线生
- 本文实例讲述了mysql存储过程原理与使用方法。分享给大家供大家参考,具体如下:存储过程包含了一系列可执行的sql语句,存储过程存放于MyS
- 1、Export/Import的用处 Oracle Export/Import工具用于在数据库之间传递数据。 Export从数据库中导出数据
- Python中对象的行为是由它的类型 (Type) 决定的。所谓类型就是支持某些特定的操作。数字对象在任何编程语言中都是基础元素,支持加、减
- 注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布时,功能可能存
- 一、前言本文使用的是 kaggle 猫狗大战的数据集:https://www.kaggle.com/c/dogs-vs-cats/data训
- Python之Web框架Django项目搭建全过程IDE说明:Win7系统Python:3.5Django:1.10Pymysql:0.7.
- 前提搭建钉钉应答机器人,需要先准备或拥有以下权限:钉钉企业的管理员或子管理员(如果不是企业管理员,可以自己创建一个企业,很方便的)有公网通信
- 摘要:神经网络的训练的主要流程包括图像输入神经网络, 得到模型的输出结果,计算模型的输出与真实值的损失, 计算损失值的梯度,最后用梯度下降算
- ASP由于是一种古老的语言,它的一些功能对UTF-8支持非常差。比如,你想生成一个UTF-8格式的文件,使用常用的 scrīpting.Fi
- 参照网上资料在CentOS6.8服务器上使用cmake安装了MySQL5.7.18,安装过程中遇到了各种各样的问题,大多问题在网上都能找到解
- 由 John Resig 的 How JavaScript Timers Work 可以知道,现有的 JavaScript 引擎是单线程处理
- 最近一周每天早上起来第一件事,就是打开新闻软件看疫情相关的新闻。了解下自己和亲友所在城市的确诊人数,但纯数字还是缺乏一个直观的概念。那我们来
- 统计平均数SELECT AVG() FROM 语法用于从数据表中统计数据平均数。语法:SELECT AVG(column) FROM tb_
- 方法一:需要在网络条件下安装win+R进入运行框输入命令cmd点击确定进入普通下载:pip install 模块名字例如:输入pi
- 前言在两种python循环语句的使用中,不仅仅是循环条件达到才能跳出循环体。所以,在对python函数进行阐述之前,先对跳出循环的简单语句块