zoukankan      html  css  js  c++  java
  • Python常用模块-时间模块

    在写代码的过程中,我们常常需要与时间打交道,在python中,与时间处理有关的模块有time,datetime和calendar.,这里主要介绍time和datetime模块

    在python中,表示时间通常有三种方式,1)时间戳 2)格式化的时间字符串 3)struc_time元组

    时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。

    元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:

    1.time模块

    (1)time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
    In [3]: time.localtime()
    Out[3]: time.struct_time(tm_year=2018, tm_mon=10, tm_mday=23, tm_hour=15, tm_min=13, tm_sec=36, tm_wday=1, tm_yday=296, tm_isdst=0)
    
    In [4]: time.localtime(time.time())
    Out[4]: time.struct_time(tm_year=2018, tm_mon=10, tm_mday=23, tm_hour=15, tm_min=14, tm_sec=51, tm_wday=1, tm_yday=296, tm_isdst=0)

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

    In [5]: time.gmtime()
    Out[5]: time.struct_time(tm_year=2018, tm_mon=10, tm_mday=23, tm_hour=7, tm_min=28, tm_sec=54, tm_wday=1, tm_yday=296, tm_isdst=0)
    
    In [6]: time.gmtime(time.time())
    Out[6]: time.struct_time(tm_year=2018, tm_mon=10, tm_mday=23, tm_hour=7, tm_min=29, tm_sec=14, tm_wday=1, tm_yday=296, tm_isdst=0)

     In [32]: a.tm_year
      Out[32]: 2018

      In [33]: a.tm_mon
      Out[33]: 10

      In [34]: a.tm_mday
      Out[34]: 23

     (3)time.time():返回当前时间的时间戳

    In [2]: time.time()
    Out[2]: 1540278735.5082414

     (4)time.mktime():将一个struct_time转化为时间戳

    In [8]: time.mktime(time.localtime())
    Out[8]: 1540279907.0

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

    In [9]: time.asctime()
    Out[9]: 'Tue Oct 23 15:33:45 2018'


    In [
    10]: time.asctime(time.localtime()) Out[10]: 'Tue Oct 23 15:33:53 2018'
    In [12]: time.asctime(time.gmtime()) Out[12]: 'Tue Oct 23 07:34:07 2018'

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

    In [13]: time.ctime()
    Out[13]: 'Tue Oct 23 15:36:24 2018'
    
    In [14]: time.ctime(time.time())
    Out[14]: 'Tue Oct 23 15:36:38 2018'

    (7) time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。

    %a 星期几的简写 
    %A 星期几的全称 
    %b 月分的简写 
    %B 月份的全称 
    %c 标准的日期的时间串 
    %C 年份的后两位数字 
    %d 十进制表示的每月的第几天 
    %D 月/天/%e 在两字符域中,十进制表示的每月的第几天 
    %F 年-月-%g 年份的后两位数字,使用基于周的年 
    %G 年分,使用基于周的年 
    %h 简写的月份名 
    %H 24小时制的小时 
    %I 12小时制的小时
    %j 十进制表示的每年的第几天 
    %m 十进制表示的月份 
    %M 十时制表示的分钟数 
    %n 新行符 
    %p 本地的AM或PM的等价显示 
    %r 12小时的时间 
    %R 显示小时和分钟:hh:mm 
    %S 十进制的秒数 
    %t 水平制表符 
    %T 显示时分秒:hh:mm:ss 
    %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
    %U 第年的第几周,把星期日做为第一天(值从0到53)
    %V 每年的第几周,使用基于周的年 
    %w 十进制表示的星期几(值从0到6,星期天为0)
    %W 每年的第几周,把星期一做为第一天(值从0到53) 
    %x 标准的日期串 
    %X 标准的时间串 
    %y 不带世纪的十进制年份(值从0到99)
    %Y 带世纪部分的十制年份 
    %z,%Z 时区名称,如果不能得到时区名称则返回空字符。
    %% 百分号
    In [15]: time.strftime('%Y-%m-%d %X')
    Out[15]: '2018-10-23 15:40:49'
    
    In [16]: time.strftime('%Y-%m-%d %H:%M:%S')
    Out[16]: '2018-10-23 15:41:11'
    
    In [17]: time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
    Out[17]: '2018-10-23 15:41:50'

     In [18]: time.strftime('%x %X')
      Out[18]: '10/23/18 15:42:26'

    (8) time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作

    In [19]: time.strptime('2018-10-23','%Y-%m-%d')
    Out[19]: time.struct_time(tm_year=2018, tm_mon=10, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=296, tm_isdst=-1)

    (9) time.clock():这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)

    import time
    
    if __name__ == '__main__':
        time.sleep(1)
        print('time.clock1:',time.clock())
        time.sleep(1)
        print('time.clock2:',time.clock())
        time.sleep(1)
        print('time.clock3:',time.clock())
    
    
    out:
    time.clock1: 4.2765453724357834e-07
    time.clock2: 1.0006513178602219
    time.clock3: 2.0011119017968335

    (10) time.sleep(secs):线程推迟指定的时间运行。单位为秒。

    总结:返回时间戳:time.time()

        时间戳 --> struct_time:  time.localtime(),time.gmtime()

             struct_time --> 'Sun Jun 20 23:21:05 1993':   time.asctime() ,   time.ctime()

          struct_time  -->  时间戳:time.mktime()

       struct_time --> 时间字符串:  time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())

       时间字符串 --> struct_time:   time.strptime('2018-10-23','%Y-%m-%d')

      

    2.datetime模块

    datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1.
    
    datetime模块定义了5个类,分别是
    
    1.datetime.date:表示日期的类
    
    2.datetime.datetime:表示日期时间的类
    
    3.datetime.time:表示时间的类
    
    4.datetime.timedelta:表示时间间隔,即两个时间点的间隔
    
    5.datetime.tzinfo:时区的相关信息
    
    一、首先看一下datetime.date类:
    
    date类有三个参数,datetime.date(year,month,day),返回year-month-day
    
    方法:
    
    1.datetime.date.ctime(),返回格式如 Sun Apr 16 00:00:00 2017
    
    2.datetime.date.fromtimestamp(timestamp),根据给定的时间戮,返回一个date对象;datetime.date.today()作用相同
    
    3.datetime.date.isocalendar():返回格式如(year,month,day)的元组,(2017, 15, 6)
    
    4.datetime.date.isoformat():返回格式如YYYY-MM-DD
    
    5.datetime.date.isoweekday():返回给定日期的星期(0-6),星期一=0,星期日=6
    
    6.datetime.date.replace(year,month,day):替换给定日期,但不改变原日期
    
    7.datetime.date.strftime(format):把日期时间按照给定的format进行格式化。
    
    8.datetime.date.timetuple():返回日期对应的time.struct_time对象
    
      time.struct_time(tm_year=2017, tm_mon=4, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=105, tm_isdst=-1)
    
    9.datetime.date.weekday():返回日期的星期
    
    python中时间日期格式化符号:
    
    %y 两位数的年份表示(00-99%Y 四位数的年份表示(000-9999%m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59%a 本地简化星期名称
    
    %A 本地完整星期名称
    
    %b 本地简化的月份名称
    
    %B 本地完整的月份名称
    
    %c 本地相应的日期表示和时间表示
    
    %j 年内的一天(001-366%p 本地A.M.或P.M.的等价符
    
    %U 一年中的星期数(00-53)星期天为星期的开始
    
    %w 星期(0-6),星期天为星期的开始
    
    %W 一年中的星期数(00-53)星期一为星期的开始
    
    %x 本地相应的日期表示
    
    %X 本地相应的时间表示
    
    %Z 当前时区的名称
    
    %% %号本身
    
     
    
    二、看一下datetime的time类
    
    time类有5个参数,datetime.time(hour,minute,second,microsecond,tzoninfo),返回08:29:30
    
    1.datetime.time.replace()
    
    2.datetime.time.strftime(format):按照format格式返回时间
    
    3.datetime.time.tzname():返回时区名字
    
    4.datetime.time.utcoffset():返回时区的时间偏移量
    
     
    
    三、datetime的datetime类
    
    datetime类有很多参数,datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]),返回年月日,时分秒
    
    datetime.datetime.ctime()
    
    datetime.datetime.now().date():返回当前日期时间的日期部分
    
    datetime.datetime.now().time():返回当前日期时间的时间部分
    
    datetime.datetime.fromtimestamp()
    
    datetime.datetime.now():返回当前系统时间
    
    datetime.datetime.replace()
    
    datetime.datetime.strftime():由日期格式转化为字符串格式
    
      datetime.datetime.now().strftime('%b-%d-%Y %H:%M:%S')
      'Apr-16-2017 21:01:35'
    
    datetime.datetime.strptime():由字符串格式转化为日期格式
    
    datetime.datetime.strptime('Apr-16-2017 21:01:35', '%b-%d-%Y %H:%M:%S')
    2017-04-16 21:01:35
     四、datetime的timedelta类
    
    datetime.datetime.timedelta用于计算两个日期之间的差值,例如:
    
    >>> a=datetime.datetime.now()
    >>> b=datetime.datetime.now()
    >>> a
    datetime.datetime(2017, 4, 16, 21, 21, 20, 871000)
    >>> b
    datetime.datetime(2017, 4, 16, 21, 21, 29, 603000)
    
    >>> b-a
    datetime.timedelta(0, 8, 732000)
    >>> (b-a).seconds
    8
    
    或者
    
    time1 = datetime.datetime(2016, 10, 20)
    time2 = datetime.datetime(2015, 11, 2)
    
    """计算天数差值"""
    print(time1-time2).days
    
    """计算两个日期之间相隔的秒数"""
    print (time1-time2).total_seconds()

    In [49]: t = datetime.datetime.now()

    In [50]: t - datetime.timedelta(1)
    Out[50]: datetime.datetime(2018, 10, 22, 16, 18, 3, 503683)

    In [51]: t
    Out[51]: datetime.datetime(2018, 10, 23, 16, 18, 3, 503683)

    In [52]: t.strftime('%Y-%m-%d %X')
    Out[52]: '2018-10-23 16:18:03'

  • 相关阅读:
    Linux文件属性
    [Oracle] Listener的动态注册
    jQuery easyUI Pagination控件自定义div分页(不用datagrid)
    桂林电子科技大学出校流量控制器Android版1.0.0
    php使用check box
    Python windows ping
    Python selenium chrome 环境配置
    Linux wget auto login and backup database
    PyQt4 ShowHMDB show sqlite3 with QTableWidget summary
    PyQt4 py2exe 打包 HardwareManager
  • 原文地址:https://www.cnblogs.com/zhangyafei/p/9836850.html
Copyright © 2011-2022 走看看