美文网首页Python学习日志程序员
【第十三天】Python中有关时间的模块

【第十三天】Python中有关时间的模块

作者: 人生苦短_我用Python | 来源:发表于2018-03-25 15:32 被阅读8次

    5.2

    1.time包

    计算机可以用来计时,从硬件上来说,计算机主板上有一个计时的表
    我们可以手动或者根据网络时间来调表,这块表有自己的电池
    所以即使断电,表也不会停,在硬件基础上
    计算机可以提供挂钟时间(Wall Clock Time)
    挂钟时间是从某个固定时间起点到现在的时间间隔
    对于UNIX系统来说,起点时间是1970年1月1日0点0分0秒
    其他日期时间都是从挂钟时间计算得到的,此外
    计算机还可以测量CPU实际运行时间,也就处理器时间(Processor Clock Time)
    以测量计算机性能,当CPU处于闲置状态时,处理器时间会暂停

    我们能通过py编程来管理时间和日期,标准库time包提供了基本的时间功能
    下面使用time包:

    import time
    print(time.time())     #挂钟时间,单位是秒
    

    还能借助模块time测量程序运行时间,比如:

    import time
    start = time.clock()
    for i in range(100000):
        print(i**2)
    end = time.clock()
    print(end - start)       #打印19.904038,即CPU运行时间
    

    上面的程序调用了两次clock()方法,从而测量镶嵌其间的程序所用的时间
    在不同的计算机系统上,clock()的返回值会有所不同,在UNIX系统上
    返回的是处理器时间,当CPU处于闲置状态时,处理器时间会暂停
    因此我们获得的是CPU运行时间,在windows系统上,返回的则是挂钟时间

    方法sleep()可以让程序休眠,根据sleep()接受到的参数
    程序会在某时间间隔之后醒来继续运行:

    import time
    print("start")
    time.sleep(10)     #休眠10秒
    print("wake up")
    

    time包还定义了struct_time对象,该对象将挂钟时间转换为年,月,日,时,分,秒等
    储存在该对象的各个属性中,比如tm_year,tm_mon,tm_mday......
    下面几种方法可以将挂钟时间转换为struct_time对象:

    st = time.gmtime()           #返回struct_time格式的UTC时间
    
    st = time.localtime()        #返回struct_time格式的当地时间,当地时区根据系统环境决定
    

    我们也可以反过来,把一个struct_time对象转换为time对象:

    s = time.mktime(st)          #将struct_time格式转换成挂钟时间
    

    2.datetime包

    datetime包是基于time包的一个高级包,用起来更加便利
    datetime可以理解为date和time两个部分组成
    date是指年月日构成的日期,相当于日历,time是指时分秒毫秒
    构成的一天24个小时中的具体时间,提供了与手表类似的功能
    因此,datetime模块下有两个类:datetime.date类和datetime.time类
    你也可以把日历和手表合在一起使用,即直接调用datetime.datetime类
    这里只介绍综合性的datetime.datetime类,单独的datetime.date类和datetime.time类与之类似

    一个时间点,比如2012年9月3日21时30分,我们可以用如下方式表达:

    import datetime
    
    t = datetime.datetime(2012,9,3,21,30)
    print(t)
    
    2012-09-03 21:30:00
    

    对象t具有如下属性:
    hour,minute,second,millisecond,microsecond
    小时,分,秒,毫秒,微秒
    year,month,day,weekday
    年,月,日,星期几

    借助datetime包,我们还可以进行时间间隔的运算
    它包含一个专门代表时间间隔对象的类,即timedelta
    一个datetime.datetime的时间点加上一个时间间隔
    就可以得到一个新的时间点,比如今天的上午3点加上5个小时
    就可以得到一个时间间隔:

    import datetime
    
    t = datetime.datetime(2012,9,3,21,30)
    t_next = datetime.datetime(2012,9,5,23,30)
    delta1 = datetime.timedelta(seconds = 600)
    delta2 = datetime.timedelta(weeks = 3)
    
    print(t + delta1)        #打印2012-09-03 21:40:00
    print(t + delta2)        #打印2012-09-24 21:30:00
    print(t_next - t)        #打印2 days, 2:00:00
    

    在给datetime.timedelta传递参数时,除了上面的秒(seconds)
    和星期(weeks)外,还可以是天(days),小时(hours),毫秒(milliseconds)
    微秒(microseconds)

    两个datetime对象能进行比较运算,以确定哪个时间间隔更长
    比如使用的t和t_next:

    print(t>t_next)          #打印False
    

    3.时间格式

    对于包含有时间信息的字符串来说,我们可以借助datetime包
    把它转换为datetime类的对象,比如:

    from datetime import datetime
    
    str = "output-1997-12-23-030000.txt"
    format = "output-%Y-%m-%d-%H%M%S.txt"
    t = datetime.strptime(str,format)
    print(t)                 #打印1997-12-23 03:00:00
    

    包含有时间信息的字符串是"output-1997-12-23-030000.txt"
    是一个文件名,字符串format定义了一个格式
    这个格式中包含了几个由%引领的特殊字符,用来代表不同时间信息
    %Y表示年份,%m表示月,%d表示日,%H表示24小时制的小时,%M表示分,%S表示秒
    通过strptime方法,py会把需要解析的字符串往格式上凑
    比如说,在格式中%Y的位置,正好看到"1997",就认为1997是datetime对象t的年
    以此类推,就从字符串中获得了t对象的时间信息

    反过来,我们也可以调用datetime对象的strftime方法
    将一个datetime对象转换为特定格式的字符串,比如:

    from datetime import datetime
    
    format = "%Y-%m-%d %H:%M"
    t = datetime(2012,9,5,23,30)
    print(t.strftime(format))     #打印2012-09-05 23:30
    

    可以看到,格式化转化的关键是%号引领的特殊符号
    这些特殊符号有很多种,分别代表不同的时间信息,常用的特殊符号还有:

    %A:表示英文的星期几,如Sunday,Monday...
    %a:简写的英文星期几,如Sun,Mon...
    %I:表示小时,12小时制
    %p:上午或者下午,即AM或PM
    %f:表示毫秒,如2,0014,000001
    

    但如果想在格式中表达%这个字符本身,而不是特殊符号,那么可以使用%%

    相关文章

      网友评论

        本文标题:【第十三天】Python中有关时间的模块

        本文链接:https://www.haomeiwen.com/subject/sqohcftx.html