美文网首页
时间模块:time和datetime

时间模块:time和datetime

作者: 阿登20 | 来源:发表于2020-08-25 17:30 被阅读0次
    image.png

    time模块

    时间的三种格式:

    1. 时间戳: time.time()
    2. 格式化的时间字符串: time.strftime("格式化字符串", struct_time)
    3. 元组(struct_time)共九个元素
    import time
    # 1.时间戳:用于时间间隔的计算 time1-time2
    # 时间戳表示的是从1970年1月1日00:00:00开始按秒计算,类型是float
    print(time.time(),type(time.time()))  # 1598339534.8193207 <class 'float'>
    #
    # # 2.格式化当前时间
    print(time.strftime("%Y-%m-%d %X"))
    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    
    # 3、结构化时间:用于单独获取时间的某一部分
    # localtime() 时间戳转化为 元组(struct_time)
    
    res = time.localtime(time.time()) # #本地时区的struct_time
    print(res,"\n",type(res))
    print(res.tm_year) # 获取年份
    print(res.tm_mday) # 获取当前月份的那一天
    print(res.tm_wday)
    # gmtime()
    res1 = time.gmtime() # UTC时区的struct_time
    print(res1)
    print(res1.tm_hour)
    print(res1.tm_wday)
    

    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 当前时区的名称
    • %% %号本身

    struct_time元组

    image.png

    其中计算机认识的时间只能是'时间戳'格式,而程序员可处理的或者说人类能看懂的时间有: '格式化的时间字符串','结构化的时间' ,于是有了下图的转换关系

    image.png
    #--------------------------按照上图-----------------------
    # localtime([secs])
    # 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
    time.localtime()
    time.localtime(1473525444.037215)
    
    # gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
    
    # mktime(t) : 将一个struct_time转化为时间戳。
    print(time.mktime(time.localtime())) #1598342352.0
    # strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和
    # time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
    # 元素越界,ValueError的错误将会被抛出。
    print(time.strftime("%Y-%m-%d %X", time.localtime()))  #2020-08-25 15:59:48
    
    # time.strptime(string[, format])
    # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
    print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
    
    #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1)
    #在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。
    

    需要真正掌握 时间戳-->格式化字符串互相掌握

    案例:“2020-08-25 16:13:24” 5天之后的时间,用代码实现

     案例:“2020-08-25 16:13:24” 5天之后的时间,用代码实现
    """
    "2020-08-25 16:13:24" 是一个字符串格式化时间,不是datetime.date.time.now() 类型。
    所以需要将字符串---struct_time---时间戳  计算5天后的时间戳---struct_time---字符串
    """
    
    import time
    tuple_time = time.strptime("2020-08-25 16:13:24", "%Y-%m-%d %H:%M:%S")
    t = time.mktime(tuple_time)+3600*24*5
    tuple_time = time.localtime(t)
    str_t = time.strftime("%Y-%m-%d %H:%M:%S", tuple_time)
    print(str_t) # 2020-08-30 16:13:24
    

    程序等待

    time.sleep(5) 做web自动化或者网络爬虫的时候用的多

    image.png
    1 #--------------------------按图转换时间---------------------------------
    2 # asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。
    3 # 如果没有参数,将会将time.localtime()作为参数传入。
    4 print(time.asctime())#Sun Sep 11 00:43:43 2016
    5 
    6 # ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为
    7 # None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
    8 print(time.ctime())  # Sun Sep 11 00:46:38 2016
    9 print(time.ctime(time.time()))  # Sun Sep 11 00:46:38 2016
    

    datetime模块

    datetime模块定义了下面这几个类:

    • datetime.date:表示日期的类。常用的属性有year, month, day;
    • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
    • datetime.datetime:表示日期时间。
    • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
    • datetime.tzinfo:与时区有关的相关信息

    time和datetime转换图形理解如下:

    image.png
    t = datetime.datetime.now()  # 返回当前的datetime日期类型
    print(t,type(t))  #2020-08-25 16:13:24.072190 <class 'datetime.datetime'>
    print(t.timestamp()) # 打印当前时间戳 1598343346.062311
    print(t.date()) # 2020-08-25
    print(t.today())  # 打印当前时间  2020-08-25 16:17:38.537745
    print(t.month)  # 月  8
    print(t.day) # 天 25
    print(t.year)  # 年份 2020
    print(t.timetuple()) # time.struct_time(tm_year=2020, tm_mon=8, tm_mday=25, tm_hour=16, tm_min=22, tm_sec=7, tm_wday=1, tm_yday=238, tm_isdst=-1)
    print(t.timetuple().tm_year) # 2020
    
    # 把一个时间戳 转为datetime日期类型
    # res = datetime.date.fromtimestamp(t.timestamp())
    res = datetime.date.fromtimestamp(1499999999)
    print(res) # 2017-07-14
    
    
    # 时间+ -
    t = datetime.datetime.now()
    print(datetime.datetime.now())  # 2020-08-25 16:32:04.332265
    print(t+datetime.timedelta(days=3)) # 当前时间+3天 2020-08-28 16:35:24.725727
    print(t+datetime.timedelta(days=-3)) # 当前时间 - 3天 2020-08-22 16:51:53.138261
    print(t+datetime.timedelta(weeks=1)) # 当前时间+一周 2020-09-01 16:37:06.759563
    
    # 格式化
    d = datetime.datetime.strftime(t+datetime.timedelta(minutes=30), "%Y%m%d%H%S%S") #20200825173232
    d1 = datetime.datetime.strftime(datetime.datetime.now(), "%Y%m%d%H%S%S")  # 20200825162121
    print(d1)
    
    # 时间替换
    t1 = t.replace(year=2021,month=9) #2021-09-25 16:42:51.233265
    print(t1)
    

    相关文章

      网友评论

          本文标题:时间模块:time和datetime

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