time-datatime

概要


目录
  • time-datatime

    • date类

    • time类

    • datetime类

    • 方法

    • 字符串输出方式

    • 属性和方法

    • 计算时间差

    • 案例1

    • 案例2

    • 案例3

    • 案例4

    • 概要

    • time模块

    • datetime模块


    Python中表示时间的两种方式

    1. 时间戳 :相对于1970.1.1 00:00:00 以秒计算的偏移量,唯一的

    2. 时间元组struct_time:共有9个元素

    • tm_year:年1-12

    • tm_mon:月1-12

    • tm_mday:日1-31

    • tm_hour:时0-23

    • tm_min:分0-59

    • tm_sec:秒0-59

    • tm_wday:星期0-6(0表示周日)

    • tm_day:一年中的第几天1-366

    • tm_isdst:是否是夏令,默认为-1

    time模块

    time是归类在常规操作系统服务中,它提供的功能更加接近于操作系统层面。其所能表述的日期范围被限定在1970-2038之间,如果需要表述范围之外的日期,可能需要考虑使用datetime模块更好。

    图片

    • time() 返回时间戳格式的时间

    • ctime() 返回字符串形式的时间,可以传入时间戳格式时间,用来做转化

    • asctime() 返回字符串形式的时间,可以传入struct_time形式时间,用来做转化

    • localtime() 返回当前时间的struct_time形式,可传入时间戳格式时间,用来做转化

    • gmtime() 返回当前时间的struct_time形式,UTC时区(0时区) ,可传入时间戳格式时间,用来做转化

    • struct_time共有9个元素,其中前面6个为年月日时分秒,后面三个分别代表的含义为:

    • tm_wday 一周的第几天(周日是0)

    • tm_yday 一年的第几天

    • tm_isdst 是否是夏令时

    常用方法:

    time.sleep([sec])       推迟指定时间后继续运行,单位: 秒 s

    time.time()   获取时间戳。返回的是一个float类型的数值。

    time.localtime([sec])    将一个时间戳转化成一个当时时区的struct_time,如果sec参数未输入,则以当前时间为转化标准

    time.gmtime([secs])   将一个时间戳转换为UTC时区 的 struct_time (时区时间格式)

    time.mktime(t)    相对的 将一个struct_time转换为时间戳

    time.asctime([t])  把一个表示时间的元组或者struct_time表示为 ‘Sun Aug 23 14:31:59 2015’ 这种形式

    time.strftime(format[,t])将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出

    • format:格式化字符串

    • t :可选的参数是一个struct_time对象

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

    函数描述输入、输出

    time.sleep(secs)推迟指定的时间运行输入单位 秒

    time.time()返回当前时间的时间戳输出float

    time.localtime([secs])返回当前时区的struct_time   元组secs 可选,单位秒

    time.gmtime([secs])将一个时间戳转换为UTC时区 的 struct_time (时区时间格式)

    time.mktime(t)相对的 将一个struct_time转换为时间戳

    time.asctime([t])把一个表示时间的元组struct_time表示为 ‘Sun Aug 23 14:31:59 2015’

    time.ctime([secs])把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式

    time.strftime(format[,t])根据指定的格式化字符串输出输入struct_time

    time.strptime()解析表示时间的字符串并返回struct_time

    案例1

    import time
    print(time.time())   # 返回时间戳
    # 1626832245.6659722
    
    #--------------------------------------------------------------------
    print(time.time())
    print(time.localtime())   # 返回 struct_time
    #1626832423.3920887
    
    print(time.localtime(1626832399.169254))  # 将一个时间戳转换为当前时区的struct_time
    
    
    #time.struct_time(tm_year=2021, tm_mon=7, tm_mday=21, tm_hour=9, tm_min=53, tm_sec=43, tm_wday=2, tm_yday=202, tm_isdst=0)
    #time.struct_time(tm_year=2021, tm_mon=7, tm_mday=21, tm_hour=9, tm_min=53, tm_sec=19, tm_wday=2, tm_yday=202, tm_isdst=0)
    
    #--------------------------------------------------------------------
    # 线程睡眠指定时间,单位为秒
    time.sleep(10)

    案例2

    print(time.asctime(time.gmtime()))
    
    # Tue Sep 21 11:17:50 2021
    
    print(time.ctime(1440338541.0))
    print(time.ctime())
    
    # Sun Aug 23 22:02:21 2015
    # Tue Sep 21 19:19:04 2021

    案例3

    localtime=time.localtime()
    print(dir(localtime))
    # [...,'tm_hour', 'tm_isdst', 'tm_mday', 'tm_min', 'tm_mon', 'tm_sec', 'tm_wday', 'tm_yday', 'tm_year', 'tm_zone']
    
    
    print(localtime)
    # time.struct_time(tm_year=2021, tm_mon=9, tm_mday=21, tm_hour=19, tm_min=21, tm_sec=58, tm_wday=1, tm_yday=264, tm_isdst=0)
    
    print(localtime.tm_year)
    # 2021	
    
    
    strtime=time.strftime("%Y-%m-%d %H:%M:%S",  localtime)
    print(strtime)
    
    
    # 2021-09-21 19:21:58
    
    # 直接使用字符串拼接成格式时间字符串
    print(str(localtime.tm_year) + "年" + str(localtime.tm_mon) + "月" + str(localtime.tm_mday) + "日")
    
    # 2021年9月21日
    
    print(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime()))
    # 2021/09/21 20:12:46

    案例4

    import time
    
    time_string = "21 June, 2018"
    result = time.strptime(time_string, "%d %B, %Y")
    
    print(result)
    
    # time.struct_time(tm_year=2018, tm_mon=6, tm_mday=21, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=172, tm_isdst=-1)

    datetime模块

    参考文献:https://blog.csdn.net/gty931008/article/details/80254806

    datetime比time高级了不少,可以理解为datetime基于time进行了封装,提供了更多实用的函数

    datetime模块定义了以下几个类:


    函数描述

    datetime.date表示日期,常用的属性有:year, month和day

    datetime.time表示时间,常用属性,hour,minute,second,

    datetime.datetime表示日期时间

    datetime.timedelta表示时间间隔

    datetime.tzinfo表示时区

    datetime.timezone

    date类

    date类定义了一些常用的类方法与类属性,date对象由year年份、month月份及day日期三部分构成

    • max、min:date对象所能表示的最大、最小日期

    • resolution:date对象表示日期的最小单位。这里是天

    • today():返回一个表示当前本地日期的date对象

    • fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象

    date.today()提供的实例方法和属性

    • year:返回年

    • month:返回月

    • day:返回日

    • replace(year, month, day):返回新的日期对象,参数指定的年,月,日代替原有对象中的属性,原有对象仍保持不变

    • weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推

    • isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推

    • isocalendar():返回格式如(year, wk num, wk day)

    • isoformat():返回格式如’YYYY-MM-DD’的字符串

    • strftime(fmt):自定义格式化字符串。与time模块中的strftime类似

    import datetime
    
    
    date1=datetime.date(2017,3,22)
    print(date1.year)
    print(date1.month)
    print(date1.day)
    
    today1=datetime.date.today()
    print(today1.year)
    
    # 2017
    # 3
    # 22
    # 2021
    
    # 两个时间点的差距
    print(today1-date1)
    # 1653 days, 0:00:00
    
    # 返回标准时间   返回符合ISO 8601标准   YYYY-MM-DD
    print(date1.isoformat())
    # 2017-03-22

    格式输出

    print(date1.__format__('%Y-%m-%d'))
    print(date1.__format__('%Y/%m/%d'))
    print(date1.__format__('%y/%m/%d'))
    
    # 2017-03-22
    # 2017/03/22
    # 17/03/22
    
    等价的方法为strftime(...)
    print(data1.strftime("%Y-%m-%d"))
    # # 2017-03-22

    time类

    class datetime.time(hour, [minute[, second, [microsecond[, tzinfo]]]])

    time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成


    参数名称取值范围

    hour[0, 23]

    minute[0, 59]

    second[0, 59]

    microsecond[0, 1000000]

    tzinfotzinfo的子类对象,如timezone类的实例

    方法


    属性和方法描述

    t.hour时

    t.minute分

    t.second秒

    t.tzinfo返回传递给time构造方法的tzinfo对象

    t.replace(hour[, minute[, second[, microsecond[, tzinfo]]]])生成并返回一个新的时间对象,原时间对象不变

    t.isoformat()返回一个‘HH:MM:SS.%f'格式的时间字符串

    t.strftime()返回指定格式的时间字符串,与time模块的strftime(format, struct_time)功能相同

    t.__ format __('%H:%M:%S')
    >>> a = datetime.time(12,20,59,899)   # 初始化
    >>> a
    datetime.time(12, 20, 59, 899)
    >>> a.hour
    12
    >>> a.minute
    20
    >>> a.second
    59
    >>> a.microsecond
    899
    >>> a.tzinfo

    字符串输出方式

    >>> a = datetime.time(12,20,59,899)
    >>> a.__format__('%H:%M:%S')
    '12:20:59'
    
    
    或者使用  strftime
    >>> a = datetime.time(12,20,59,899)
    >>> a.strftime('%H:%M:%S')
    '12:20:59'

    datetime类

    class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)


    参数名称取值范围

    year[MINYEAR, MAXYEAR]

    month[1, 12]

    day[1, 指定年份的月份中的天数]

    hour[0, 23]

    minute[0, 59]

    second[0, 59]

    microsecond[0, 1000000]

    tzinfotzinfo的子类对象,如timezone类的实例

    属性和方法


    对象方法/属性名称描述

    dt.year, dt.month, dt.day年、月、日

    dt.hour, dt.minute, dt.second时、分、秒

    dt.microsecond, dt.tzinfo微秒、时区信息

    dt.date()获取datetime对象对应的date对象

    dt.time()获取datetime对象对应的time对象, tzinfo 为None

    dt.timetz()获取datetime对象对应的time对象,tzinfo与datetime对象的tzinfo相同

    dt.timetuple()返回datetime对象对应的tuple(不包括tzinfo)

    dt.utctimetuple()返回datetime对象对应的utc时间的tuple(不包括tzinfo)

    dt.isoformat([sep])返回一个‘%Y-%m-%d

    dt.strftime(format)返回指定格式的时间字符串



    from datetime import datetime,timezone
    date=datetime.today()
    date1=datetime(2017, 2, 4, 20, 44, 40, 556318)
    date2=datetime(2017, 2, 4, 20, 44, 56, 572615)
    
    
    date3=datetime.now(timezone.utc)
    print(date3)
    print(date.utcnow())
    # 2021-10-15 09:24:36.352276+00:00
    # 2021-10-15 09:24:36.353277
    
    
    res=datetime.fromtimestamp(time.time())
    print(res)
    date1=datetime(2017, 2, 4, 20, 46, 41, 97578)
    print(date1)
    
    date2=datetime.utcfromtimestamp(time.time())
    print(date2)
    
    date4=datetime(2017, 2, 4, 20, 5, 40, 8888)
    res=date4.strptime('2017/02/04 20:49', '%Y/%m/%d %H:%M')
    print(res)
    
    #2021-10-15 17:33:22.824000
    #2017-02-04 20:46:41.097578
    #2021-10-15 09:33:22.824000
    #2017-02-04 20:49:00
    
    
    print(res.day)
    print(res.second)
    print(res.hour)
    #4
    #0
    #20
    
    print(res.timestamp())
    print(res.date())
    print(res.replace(2021))
    #1486212540.0
    #2017-02-04
    #2021-02-04 20:49:00
    
    
    print(res.isoformat())
    print(res.isoformat(sep='/'))
    print(res.isoformat(sep=' '))
    print(res.strftime('%Y%m%d %H:%M'))
    
    #2017-02-04T20:49:00
    2017-02-04/20:49:00
    2017-02-04 20:49:00
    20170204 20:49

    计算时间差

    import time 
    from datetime import datetime 
    
    a=datetime.now() 
    time.sleep(1)
    b=datetime.now() 
     
    print(a)
    print(b)
    
    print(str(a))
    # 'Z2015-04-07 04:30:03.628556' 
    
    print(datetime.strptime(str(a),"%Y-%m-%d %H:%M:%S.%f"))
    
    c=b-a
    print(c)
    print(c.seconds)
    
    
    # 2021-10-15 17:10:20.121184
    # 2021-10-15 17:10:21.121714
    # 2021-10-15 17:10:20.121184
    # 2021-10-15 17:10:20.121184
    # 0:00:01.000530
    # 1
    import time
    import datetime
    d1 = datetime.datetime(2005, 2, 16)
    d2 = datetime.datetime(2004, 12, 31)
    
    print(d2-d1).days
    # 47

    更多文章请关注《万象专栏》