python工具模块介绍-time 时间访问和转换

快速入门

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: 0

localtime:
  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: 0

mktime: 1529256774.0

参考资料

参考资料

时区

重置库函数的时间转换规则。实际上是修改环境变量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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python工具模块介绍-time 时间访问和转换 - Python技术站

(0)
上一篇 2023年4月25日
下一篇 2023年4月25日

相关文章

  • Python音乐爬虫完美绕过反爬

    Python音乐爬虫完美绕过反爬攻略 在爬取音乐网站数据时,我们会发现大部分网站都采用了反爬机制,以尽可能防止爬虫程序对其数据的获取。本篇将介绍如何使用Python完美绕过这些反爬机制。 反爬机制的常用手段 UA检测:检测请求的User-Agent是否为浏览器的User-Agent。如果不是,则视为爬虫程序。 Cookie检测:检测请求头中是否携带了必要的C…

    python 2023年5月14日
    00
  • Python免登录实现域名解析的示例详解

    Python免登录实现域名解析的示例详解 在本文中,我们将介绍如何使用Python免登录实现域名解析。我们将使用dnspython库来解析域名,并使用requests库发送HTTP请求。 步骤1:安装必要的库 在使用Python免登录实现域名解析之前,我们需要先安装必要的库: pip install dnspython requests 在上面的示例中,我们…

    python 2023年5月15日
    00
  • 表格梳理解析python内置时间模块看完就懂

    表格梳理解析Python内置时间模块看完就懂 介绍 Python内置的时间模块datetime提供了处理日期和时间的函数和类,可以帮助我们方便地进行时间计算和转换。本文将详细讲解datetime模块的各个函数和类的用法,以及示例说明,让读者能够轻松理解和使用。 datetime类 datetime是datetime模块最常用的类,表示一个日期和时间的对象。类…

    python 2023年6月6日
    00
  • Python 中的加速生成器 -> 列表 -> CSV

    【问题标题】:Speed-up Generator -> List -> CSV in PythonPython 中的加速生成器 -> 列表 -> CSV 【发布时间】:2023-04-07 02:16:02 【问题描述】: 我需要优化写入从 Elastic Search 中提取的 CSV 文件数据的过程,其中 elasticsear…

    Python开发 2023年4月7日
    00
  • python编码问题汇总

    以下是关于Python编码问题汇总的完整攻略: 问题描述 在Python中,编码问题是一个常见的问题。在处理文本、文件、网络数据等方面,可能会遇到编码问题。了解这些问题可以帮助我们更好地处理文本和数据。 解决方法 可以使用以下步骤解决Python编码问题: 确认编码格式。 在处理文本和数据时,需要确认编码格式。可以使用chardet库或其他工具检测编码格式。…

    python 2023年5月13日
    00
  • 教你使用python搭建一个QQ机器人实现叫起床服务

    教你使用Python搭建一个QQ机器人实现叫起床服务 QQ机器人是基于 QQ 聊天软件平台而产生的一种基于 QQ 协议的机器人,它可以通过你的 QQ 帐号来接受指令并进行自动化操作,比如自动回复、定时发送消息等。在本篇攻略中,将介绍如何利用 Python 语言搭建一个 QQ 机器人,来实现每日叫起床的服务。 准备工作 注册一个腾讯云开发者帐号并登录。进入腾讯…

    python 2023年5月23日
    00
  • python错误:AttributeError: ‘module’ object has no attribute ‘setdefaultencoding’问题的解决方法

    当使用Python 2.x版本时,可能会出现”AttributeError: ‘module’ object has no attribute ‘setdefaultencoding'”错误。这是由于Python 2.x中默认的字符集编码是ASCII,而Python 3.x中默认的字符集编码是UTF-8。 解决方法一:在代码文件的开头添加以下内容: impo…

    python 2023年6月3日
    00
  • python面向对象入门教程之从代码复用开始(一)

    《python面向对象入门教程之从代码复用开始(一)》是一篇介绍Python面向对象编程(OOP)的入门教程,主要讲解Python面向对象编程的基础概念、类的创建和使用、继承和多态等方面的内容,帮助用户深入了解并掌握Python的面向对象编程。 该教程主要分为以下几个部分进行讲解: 一、什么是面向对象编程? 从面向对象编程的思想、概念以及优势等多个方面,详细…

    python 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部