zoukankan      html  css  js  c++  java
  • python时间和日期

    转自:https://www.cnblogs.com/fengfenggirl/archive/2013/05/20/python_time.html

    1、时钟时间--time

      time提供了很多管理时钟时间的函数,如

    1)获取以秒为单位的浮点时间time():

    >>> import time
    >>> print time.time()#获取当前时间的浮点值,单位为秒
    1369031293.33
    >>> 

    2)获取人可以直观理解的时间ctime():

    >>> print time.ctime()
    Mon May 20 14:29:30 2013#获取人能理解的直观时间

    3)浮点时间转化为直观时间:

    >>> t = time.time()#浮点时间
    >>> print t
    1369034676.69
    >>> print time.ctime(t)#浮点时间转化为直观时间
    Mon May 20 15:24:36 2013

    4)ctime()到time(),直观时间到浮点时间的直接转化,我在python的标准库中没有找到。但经过一步中间转化strptime()为UTC时间后,可以转化为浮点时间,建议先看到9)再回来看,这样会比较容易理解。

    >>> t = time.time()#浮点时间
    >>> ct = time.ctime(t)#浮点转化为直观时间
    >>> gmt = time.strptime(ct)#直观时间转化为UTC时间
    >>> tt = time.mktime(gmt)#UTC时间转化为浮点值时间
    >>> print t,tt
    1369035200.01 1369035200.0

    注意:浮点时间t先转化为直观时间ct,再转化为浮点时间tt,发现tt的精度降低了。因为直观时间只能精确到秒,所以从浮点时间t先转化为直观时间ct,小数点后面的毫秒就已经丢失了。

    5)获取格林尼治时间UTC(Coordinated Universal Time,协调时间)格式:

    >>> print time.gmtime()#获取UTC格式的当前时间
    time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=6, tm_min=37, tm_sec=45, tm_wday=0, tm_yday=140, tm_isdst=0)

    一个UTC格式的时间有9项目,最后一个tm_isdst表示是否是夏时令时间

    6)获取当前时区的当前时间localtime()

    >>> print time.localtime()#获取当前时区的当前时间
    time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=14, tm_min=45, tm_sec=24, tm_wday=0, tm_yday=140, tm_isdst=0)

    7)解析UTC格式时间:

    复制代码
    import time
    def show_timestruct(t):
        print '年:',t.tm_year
        print '月:',t.tm_mon
        print '日:',t.tm_mday
        print '小时:',t.tm_hour
        print '分钟',t.tm_min
        print '',t.tm_sec
        print '星期:',t.tm_wday
        print '一年的第 %s 天' % t.tm_yday
        print '是否夏时令:',t.tm_isdst
    if __name__ == "__main__":
        t = time.gmtime()
        show_timestruct(t)
    >>>
    年: 2013
    月: 5
    日: 20
    小时: 7
    分钟 9
    秒 50
    星期: 0
    一年的第 140 天
    是否夏时令: 0
    复制代码

    8)将UTC格式的时间转化为浮点值的时间:

    复制代码
    >>> gmt = time.gmtime()#UTC格式的时间
    >>> print gmt
    time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=6, tm_min=48, tm_sec=13, tm_wday=0, tm_yday=140, tm_isdst=0)
    >>> print time.mktime(gmt)#将UTC格式的时间转化为浮点值的时间
    1369003693.0
    
    >>> lt = time.localtime()#将UTC格式当前时区当前时间
    >>> print lt
    time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=14, tm_min=49, tm_sec=25, tm_wday=0, tm_yday=140, tm_isdst=0)
    >>> print time.mktime(lt)##将UTC格式的时间转化为浮点值的时间
    1369032565.0
    复制代码

    9)将浮点值的时间转化为UTC格式的时间:

    >>> t = time.time()#浮点时间
    >>> print time.gmtime(t)#将浮点值的时间转化为UTC格式的时间:
    time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=6, tm_min=57, tm_sec=58, tm_wday=0, tm_yday=140, tm_isdst=0)
    >>> print time.localtime(t)#将浮点值的时间转化为UTC格式当前时区时间:
    time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=14, tm_min=57, tm_sec=58, tm_wday=0, tm_yday=140, tm_isdst=0)
    >>> 

    三类时间格式之间的转换如下:

    10)格式化日期:

    >>> lt = time.localtime()#UTC格式当前时区时间
    >>> st = time.strftime("%b %d %a %H:%M:%S %Y %s",lt)格式化时间
    >>> print st
    May 20 Mon 15:54:34 2013 1369036474

    具体的参数如下表,翻译源自:python官方文档

    标识 含义 举例
    %a 星期简写 Mon 
    %A 星期全称 Monday 
    %b 月份简写  Mar
    %B 月份全称  March
    %c 适合语言下的时间表示 May Mon May 20 16:00:02 2013 
    %d 一个月的第一天,取值范围: [01,31].  20
    %H 24小时制的小时,取值范围[00,23]. 17 
    %I 12小时制的小时,取值范围 [01,12].  10
    %j 一年中的第几天,取值范围 [001,366]. 120 
    %m 十进制月份,取值范围[01,12].  50
    %M 分钟,取值范围 [00,59].  50
    %p 上、下午,AM 或 PM. PM
    %S 秒,取值范围 [00,61]. 30
    %U 这一年的星期数(星期天为一个星期的第一天,开年的第一个星期天之前的天记到第0个星期)趋势范围[00,53]. 20
    %w 星期的十进制表示,取值范围 [0(星期天),6].
    %W 这一年的星期数(星一为一个星期的第一天,开年的第一个星期一之前的天记到第0个星期)趋势范围[00,53]. 20
    %x 特定自然语言下的日期表示 05/20/13 
    %X 特定自然语言下的时间表示  16:00:02
    %y 年的后两位数,取值范围[00,99]. 13 
    %Y 完整的年 2013
    %Z 时区名  CST(China Standard Time)
    %% %字符

    11)CPU时钟时间clock(),它反映了程序运行的实际时间,使用它做性能测试更准确

    复制代码
    import time
    
    for i in range(5):
        print time.time(),'	',time.clock()
        a = i*3.14
        for j in range(4000000):
            a += j-i
    复制代码

    在ubuntu中的输出为下:

    >>>
    1369040214.11     0.01
    1369040214.97     0.87
    1369040215.76     1.67
    1369040216.56     2.46

    当程序休眠时,CPU不工作,time.clock()的值不会增加(具体与操作系统有关):

    import time
    for i in range(5):
            print time.time(),time.clock()
            print "sleep ",i
            time.sleep(i)

    在Ubuntu下输出结果为:

    复制代码
    1369040510.93 0.02
    sleep  0
    1369040510.93 0.02
    sleep  1
    1369040511.93 0.02
    sleep  2
    1369040513.94 0.02
    sleep  3
    1369040516.94 0.02
    sleep  4
    复制代码

    注:在windows下面time.clock()的值会增加

    2 、日期和时间管理--datetime

    1)datetime中中的时间由time表示:可以用datetime.time()直接构造时间,不过参数必须在指定范围内:

    >>> import datetime
    >>> print datetime.time(18,20,56)#构造时间
    18:20:56
    >>> print datetime.time.min,datetime.time.max,datetime.time.resolution
    00:00:00 23:59:59.999999 0:00:00.000001

    2)日期由date表示,today()可以获得今天的日期,其中的年、月、日都可以替换

    复制代码
    >>> d = datetime.date(1998,2,5)#构造日期
    >>> d
    datetime.date(1998, 2, 5)
    #日期最小值,最大值,精度
    >>> print datetime.date.min,datetime.date.max,datetime.date.resolution
    0001-01-01 9999-12-31 1 day, 0:00:00
    
    >>> today = datetime.date.today()#生成今天的日期
    >>> print today
    2013-05-20
    >>> print today.replace(day=19)#替换日
    2013-05-19
    >>> print today.replace(month=3)#替换月
    2013-03-20
    >>> print today.replace(year=2003)#替换年
    2003-05-20
    复制代码

    3)时间段datedelta,datedelta可以表示星期、日、小时、分钟、秒、毫秒、微秒:

    复制代码
    >>> print datetime.timedelta(weeks=1)#一个星期
    7 days, 0:00:00
    >>> print datetime.timedelta(days=1)#一天
    1 day, 0:00:00
    >>> print datetime.timedelta(hours=1)#一小时
    1:00:00
    >>> print datetime.timedelta(minutes=1)#1分钟
    0:01:00
    >>> print datetime.timedelta(seconds=1)#一秒
    0:00:01
    >>> print datetime.timedelta(milliseconds=1)#一毫秒
    0:00:00.001000
    >>> print datetime.timedelta(microseconds=1)#一微秒
    0:00:00.000001
    复制代码

    注意timedelta的内部值是用日、秒、微秒存储。

    >>> delta = datetime.timedelta(weeks=1,days=1,hours=1,minutes=1,seconds=1,milliseconds=1,microseconds=1)
    >>> delta
    datetime.timedelta(8, 3661, 1001)

    利用时间段可以很方便的进行时间和日期运算:

    复制代码
    >>> today = datetime.date.today()
    >>> print '今天:',today
    今天: 2013-05-20
    >>> oneday = datetime.timedelta(days=1)#一天
    >>> yesterday = today - oneday#昨天
    >>> print '昨天:',yesterday
    昨天: 2013-05-19
    >>> tomorrow = today + oneday#明天
    >>> print "明天:",tomorrow
    明天: 2013-05-21
    >>> print tomorrow - yesterday#时间作差
    2 days, 0:00:00
    >>> print yesterday - tomorrow
    -2 days, 0:00:00
    复制代码

    4)时间、时间段可以比较大小,这里不详细介绍。

    5)日期和时间结合,datetime中的datetime,即datetime.datetime存储了时间和日期

    >>> print '现在:',datetime.datetime.now()
    现在: 2013-05-20 19:36:36.385627
    >>> print '今天:',datetime.datetime.today()
    今天: 2013-05-20 19:37:15.515159
    >>> print 'UTC:',datetime.datetime.utcnow()
    UTC: 2013-05-20 11:37:54.000763

    上面创建的datetime实例都可以用getattr()解析:

    #解析时间
    import datetime
    now = datetime.datetime.now()
    items = ['year','month','day','hour','minute','second','microsecond']
    for attr in items:
        print '%12s: %s' % (attr,getattr(now,attr))

    输出结果:

    复制代码
    >>>
            year: 2013
           month: 5
             day: 20
            hour: 19
          minute: 44
          second: 41
     microsecond: 466798
    复制代码

    可以使用date和time结合成一个datetime

    >>> t = datetime.time(20,1,4)#赖你一世
    >>> d = datetime.date.today()#赖你一生吾赖你
    >>> dt = datetime.datetime.combine(d,t)
    >>> print dt
    2013-05-20 20:01:04

    3、Calendar处理日期,管理面向年、月、周的时间。

    Calendar定义了三个类Calendar、TextCalendar和HTMLCalendar

    利用TextCalendar的prmonth()可以生成一个格式化的日历

    复制代码
    c = calendar.TextCalendar(calendar.SUNDAY)
    >>> c.prmonth(2012,5)
          May 2012
    Su Mo Tu We Th Fr Sa
           1  2  3  4  5
     6  7  8  9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31
    复制代码

    利用HTMLCalendar和formatmonth()也可以生成这样的日历,只是有一些HTML标签,保存成HTML,在浏览器下打开就可以看到了

    HTMLCalendar在处理一些重复性日期时比较方便,假设公司每个月第二周的周二要开一次会议,现在要计算今天这一年开会的日期:

    复制代码
    import calendar
    for month in range(1,13):#遍历每个月份
        c = calendar.monthcalendar(2013,month)
        firstweek = c[0]
        secondweek = c[1]
        thirdweek = c[2]
        if firstweek[calendar.TUESDAY]:#如果第0个星期有星期二,第1个星期二就该开会
            meetingdate = secondweek[calendar.TUESDAY]
        else:
            meetingdate = thirdweek[calendar.TUESDAY]
        print '%5s: %2s' % (calendar.month_abbr[month],meetingdate)
    复制代码

    输出的开会日期是:

    复制代码
      >>>
      Jan: 8 Feb: 12 Mar: 12 Apr: 9 May: 14 Jun: 11 Jul: 9 Aug: 13 Sep: 10 Oct: 8 Nov: 12 Dec: 10
    复制代码

     补充,字符串时间转成数值型时间

    将"2011-09-28 10:00:00"转化为时间戳

    time.mktime(time.strptime(a,'%Y-%m-%d %H:%M:%S'))
    >>1317091800.0
  • 相关阅读:
    Install Postgresql on Ubuntu
    Pytest
    Pytest
    wrk 压力测试
    Objective-C 格式化字符串Format
    安装BeyondCompare on Ubuntu
    eclipse + python + pydev (Pydev安装成功确看不到插件的解决办法)
    如何解决: Ubuntu 系统 adb devices出现no permissions
    oracle rac搭建
    CentOS6.8编译安装LAMP
  • 原文地址:https://www.cnblogs.com/fengff/p/8674681.html
Copyright © 2011-2022 走看看