zoukankan      html  css  js  c++  java
  • Python标准库--time模块的详解

    time模块 - - -时间获取和转换


    在我们学习time模块之前需要对以下的概念进行了解;

    时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数.

    UTC(Coordinated Universal Time,世界协调时):协调世界时,又称世界统一时间、世界标准时间、国际协调时间,在我国为UTC+8。

    DST(Daylight Saving Time):夏令时

      1986年4月,中国中央有关部门发出“在全国范围内实行夏时制的通知”,具体作法是:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时,夏令时结束。

    结构化时间:

    • time.localtime()        
    • time.gmtime()世界标准时间(格林尼治时间) 

    结构化时间转成时间戳:time.mktime(time.localtime())

    结构化时间转成字符串时间:time.strftime('%Y-%m-%d %X',time.localtime())

    字符串时间转成结构化时间:time.strptime('2017:05:07:19:47:36','%Y-%m-%d %X')

    时间元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

     
    索引值 属性
    0 tm_year(年) (例如:2018)
    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(60代表闰秒,61是基于历史原因保留)
    6 tm_wday(星期几) 0-6(0表示星期一)
    7 tm_yday(一年中的第几天) 1-366
    8 tm_isdst(是否为夏令时) 0,1,-1(-1代表夏令时)

     time.time()-->float


    说明:

      返回当前时间的时间戳(1970元年后的浮点秒数)

     实例

    In [1]: import time
    
    In [2]: time.time()
    Out[2]: 1533177066.8094957

    time.sleep(secs)


    说明:

      推迟调用线程的运行,secs的单位是秒

    实例:

    import time 
    
    start_time = time.time()
    time.sleep(5)
    end_time = time.time()
    print(start_time-end_time) # -5.000396013259888

    time.gmtime([secs])


    说明

      和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

    In [14]: time.gmtime()
    Out[14]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=2, tm_hour=3, tm_min=18, tm_sec=52, tm_wday=3, tm_yday=214, tm_isdst=0)

     默认调用time.time()

    In [32]: time.gmtime()
    Out[32]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=3, tm_hour=4, tm_min=37, tm_sec=24, tm_wday=4, tm_yday=215, tm_isdst=0)
    
    In [33]: time.gmtime(33)
    Out[33]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=33, tm_wday=3, tm_yday=1, tm_isdst=0)
    
    In [34]: time.gmtime(time.time())
    Out[34]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=3, tm_hour=4, tm_min=37, tm_sec=44, tm_wday=4, tm_yday=215, tm_isdst=0)

    time.localtime([secs])   


    说明:

      将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。

    实例:

    In [16]: time.localtime()
    Out[16]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=2, tm_hour=11, tm_min=20, tm_sec=6, tm_wday=3, tm_yday=214, tm_isdst=0)

     默认调用time.time()

    In [29]: time.localtime(55)
    Out[29]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=55, tm_wday=3, tm_yday=1, tm_isdst=0)
    
    In [30]: time.time()# 当前时间戳
    Out[30]: 1533270573.173084
    
    In [31]: time.localtime(time.time())
    Out[31]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=3, tm_hour=12, tm_min=29, tm_sec=43, tm_wday=4, tm_yday=215, tm_isdst=0)

    time.mktime(t)


    说明:

      将一个struct_time转化为时间戳。

    In [26]: import time
    
    In [27]: time.localtime()
    Out[27]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=3, tm_hour=12, tm_min=22, tm_sec=6, tm_wday=4, tm_yday=215, tm_isdst=0)
    
    In [28]: time.mktime(time.localtime())
    Out[28]: 1533270142.0

    time.asctime (t)


    说明:

      把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入。

    实例:

    当没有参数的时候默认将time.localtime()传入

    In [38]: time.asctime()
    Out[38]: 'Fri Aug  3 12:55:58 2018'
    
    In [39]: time.localtime()
    Out[39]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=3, tm_hour=12, tm_min=56, tm_sec=4, tm_wday=4, tm_yday=215, tm_isdst=0)
    
    In [40]: time.asctime(time.localtime())
    Out[40]: 'Fri Aug  3 12:56:18 2018'

    当传入的参数为时间元组的时候

    In [46]: time.asctime((2018, 8, 3, 12, 57, 19, 134860,0,0)) # 关于时间元组的获取
    Out[46]: 'Sat Aug  3 12:57:19 2018'

    time.ctime([secs])


    说明:

      把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

    实例

    In [51]: time.ctime()
    Out[51]: 'Fri Aug  3 13:13:55 2018'
    
    In [52]: time.ctime(int(time.time()))
    Out[52]: 'Fri Aug  3 13:14:01 2018'
    
    In [53]: time.ctime(time.time()) 
    Out[53]: 'Fri Aug  3 13:14:06 2018'

    time.struct_time()


    说明:

      接收一个时间元组,返回一个struct_time()的对象

    实例:

    In [59]: time.struct_time((2018, 8, 3, 12, 57, 19, 134860,0,0))
    Out[59]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=3, tm_hour=12, tm_min=57, tm_sec=19, tm_wday=134860, tm_yday=0, tm_isdst=0)

     time.strftime(format [, t])--->返回字符串表示当地的时间


     说明:

      返回字符串表示的当地时间。 
      把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串,格式由参数format决定。如果未指定,将传入time.localtime()。如果元组中任何一个元素越界,就会抛出ValueError的异常。函数返回的是一个可读表示的本地时间的字符串。

    参数:

    • format:格式化字符串
    • t :可选的参数是一个struct_time对象

     时间字符串支持的格式符号:(区分大小写)

     1 %a  本地星期名称的简写(如星期四为Thu)      
     2 %A  本地星期名称的全称(如星期四为Thursday)      
     3 %b  本地月份名称的简写(如八月份为agu)    
     4 %B  本地月份名称的全称(如八月份为august)       
     5 %c  本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06 6 %d  一个月中的第几天(01 - 31 7 %f  微妙(范围0.999999 8 %H  一天中的第几个小时(24小时制,00 - 23 9 %I  第几个小时(12小时制,0 - 1110 %j  一年中的第几天(001 - 36611 %m  月份(01 - 1212 %M  分钟数(00 - 5913 %p  本地am或者pm的相应符      
    14 %S  秒(00 - 6115 %U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之    前的所有天数都放在第0周。     
    16 %w  一个星期中的第几天(0 - 6,0是星期天)    
    17 %W  和%U基本相同,不同的是%W以星期一为一个星期的开始。    
    18 %x  本地相应日期字符串(如15/08/0119 %X  本地相应时间字符串(如08:08:1020 %y  去掉世纪的年份(00 - 99)两个数字表示的年份       
    21 %Y  完整的年份(4个数字表示年份)
    22 %z  与UTC时间的间隔(如果是本地时间,返回空字符串)
    23 %Z  时区的名字(如果是本地时间,返回空字符串)       
    24 %%  ‘%’字符

    实例:

    通过函数将struct_time转成格式字符串

    In [64]: time.localtime()
    Out[64]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=3, tm_hour=17, tm_min=6, tm_sec=14, tm_wday=4, tm_yday=215, tm_isdst=0)
    
    In [65]: time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
    Out[65]: '2018-08-03 17:06:18'
    
    In [66]: time.strftime("%Y-%m-%d",time.localtime())
    Out[66]: '2018-08-03'

    如果不传入struct_time参数则默认返回当前的时间格式化字符串

    In [67]: time.strftime("%Y-%m-%d")
    Out[67]: '2018-08-03'

    手动拼接显示字符串时间

    In [6]: str(time.localtime().tm_year)+""+str(time.localtime().tm_mon)+""+str(time.localtime().tm_mday)+""
    Out[6]: '2018年8月3日'

    获取当前的时分秒

    In [10]: time.strftime("%H-%M-%S")
    Out[10]: '17-24-28'

    获取当前的年月日

    In [11]: time.strftime("%y-%m-%d")
    Out[11]: '18-08-03'

     获取当前格式化时间。需要注意的是在python框架中对于时间的字段返回的是datetime.datetime()的时间类型

    In [12]: import time
    
    In [13]: from datetime import datetime
    
    In [15]: datetime.now()
    Out[15]: datetime.datetime(2018, 8, 3, 22, 45, 34, 453989)
    
    In [16]: datetime_obj = datetime.now()
    
    In [17]: datetime_obj.strftime("%Y-%m-%d %H:%M:%S %f")
    Out[17]: '2018-08-03 22:46:06 462418'

    星期的简写

    In [18]: datetime_obj.strftime('%a')
    Out[18]: 'Fri'

    星期的全写

    In [19]: datetime_obj.strftime('%A')
    Out[19]: 'Friday'

    月份的简写

    In [20]: datetime_obj.strftime('%b')
    Out[20]: 'Aug'

    月份的全写

    In [21]: datetime_obj.strftime('%B')
    Out[21]: 'August'

    得到日期时间的字符串

    In [22]: datetime_obj.strftime('%c')
    Out[22]: 'Fri Aug  3 22:46:06 2018'

    日期字符串

    In [24]: datetime_obj.strftime('%x')
    Out[24]: '08/03/18'

    时间字符串

    In [25]: datetime_obj.strftime('%X')
    Out[25]: '22:46:06'

    今天在这周是星期几

    In [26]: datetime_obj.strftime('%w')
    Out[26]: '5'

    今天是今年的第几天

    In [27]: datetime_obj.strftime('%j')
    Out[27]: '215'

    这周是第几天

    In [28]: datetime_obj.strftime('%U')
    Out[28]: '30'

    time.strptime(string[,format]) 


    说明:

      将格式字符串转化成struct_time. 
      该函数是time.strftime()函数的逆操作。time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。所以函数返回的是struct_time对象。

    参数:

    • string :时间字符串
    • format:格式化字符串

    创建一个时间字符串的对象

    In [12]: import time
    
    In [13]: from datetime import datetime
    
    In [16]: datetime_obj = datetime.now()
    
    In [30]: str_time = datetime_obj.strftime("%Y-%m-%d %H:%M:%S")
    
    In [31]: str_time
    Out[31]: '2018-08-03 22:46:06'

    将字符串的时间转换成strcut_time对象

    In [30]: str_time = datetime_obj.strftime("%Y-%m-%d %H:%M:%S")
    
    In [31]: str_time
    Out[31]: '2018-08-03 22:46:06'
    
    In [32]: struct_obj = time.strptime(str_time,"%Y-%m-%d %H:%M:%S")
    
    In [33]: struct_obj
    Out[33]: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=3, tm_hour=22, tm_min=46, tm_sec=6, tm_wday=4, tm_yday=215, tm_isdst=-1)

     对struct_time()使用for循环进行遍历

    In [35]: for t in struct_obj:
       ....:     print(t)
       ....:     
    2018
    8
    3
    22
    46
    6
    4
    215
    -1

    注意:注意在使用strptime()函数将一个指定格式的时间字符串转化成元组时,参数format的格式必须和string的格式保持一致,如果string中日期间使用“-”分隔,format中也必须使用“-”分隔,时间中使用冒号“:”分隔,后面也必须使用冒号分隔,否则会报格式不匹配的错误。

    time.altzone 

    time.clock   

    time.clock_getres  

    time.daylight

    time.get_clock_info 

    time.monotonic 

    time.perf_counter  

    time.process_time   

    time.timezone

    time.tzname

    time.tzset

  • 相关阅读:
    使用栈检测括号是否成对出现
    java多线程基本概述(十七)——原子性和易变性
    java多线程基本概述(十六)——捕获异常
    java多线程基本概述(十五)——DaemonThread
    java多线程基本概述(十四)——Thread内部类的几种写法
    java多线程基本概述(十三)——Executor
    java多线程基本概述(十二)——多线程与单例
    java多线程基本概述(十一)——ReadWriteLock
    java多线程基本概述(十)——Condition
    java多线程基本概述(九)——Lock(3)
  • 原文地址:https://www.cnblogs.com/Echo-O/p/9385316.html
Copyright © 2011-2022 走看看