当前位置:

首页 > 编程开发 > Python中时间访问和转换的方法详解

Python中时间访问和转换的方法详解

快速入门In[1]:importtime#获取当前时间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(

本文目录

      快速入门

      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

      参考资料

      参考资料

      • 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')
      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Python time
      相关文章 更多
      python删除一个列表里的重复元素的方法与代码示例
      python删除一个列表里的重复元素的方法与代码示例

      学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

      Python写接口的步骤及完整代码示例
      Python写接口的步骤及完整代码示例

      详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

      codex怎么读取word文档及docx文件操作教程
      codex怎么读取word文档及docx文件操作教程

      介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

      怎么在Python中调用C语言代码提升性能
      怎么在Python中调用C语言代码提升性能

      详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

      Python与C语言的性能差异及底层原理
      Python与C语言的性能差异及底层原理

      深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

      Python和C语言哪个更适合编程入门
      Python和C语言哪个更适合编程入门

      客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

      selenium上传文件教程本地文件路径设置方法
      selenium上传文件教程本地文件路径设置方法

      深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

      针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

      langgraph python guide中文入门教程详解
      langgraph python guide中文入门教程详解

      本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

      Windows 安装 Python:从官方入口到虚拟环境的可复现实践
      Windows 安装 Python:从官方入口到虚拟环境的可复现实践

      面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。