时间模块
时间间隔:是以秒为单位的浮点数
时间戳: 从1970.1.1 00:00:00 开始到指定时间的秒数
1.time模块
UTC : 格林威治天文时间,世界标准时间,在中国UTC+8
DST: 夏令时
时间的表示形式:
① 时间戳: 以整型或者浮点型表示的一个以秒为单位的时间间隔,从1970.1.1 00:00:00 开始到指定时间的秒数
② 元组形式 :
时间的元组形式【year:年,month:月,day:天,hour:时,minutes:分,seconds:秒,weekday:星期,day in year: 一年中的第几天,isdst:是否是夏令时(0表示正常格式,1表示夏令时格式,-1表示自定义格式)】
注意:mouth的取值范围:1~12 weekday的取值范围:0~6,0表示星期一
③ 字符串形式:
使用格式化的方式表示时间,%Y:年份 %m:月份 %d:日 %M:分钟 %h:【12小时制】 %H:【24小时制】 %s:秒
1.1time模块常用的方法
import time '''时间的获取''' # 1.返回当前时间的时间戳,结果为一个浮点数 t1 = time.time() print(t1) # 2.获取UTC的元组形式 t2 = time.gmtime() print(t2) # 3.获取本地时间的元组形式 t3 = time.localtime() print(t3) '''时间相互之间的转换''' # 4.将时间的元组形式转换为时间戳形式 t4 = time.mktime(t3) print(t4) # 5.将时间的元组形式转换为字符串形式 t5 = time.asctime(t3) print(t5) # 6.将时间戳形式转换为字符串形式 t6 = time.ctime(t4) print(t6) # 7.将时间的元组形式转换为字符串形式:自定义格式 t7 = time.strftime("%Y-%m-%d", t3) print(t7) # 8.将时间的字符串形式转换为元组形式 # 注意:时间的字符串必须和时间的格式保持完全一致,否则报错 t8 = time.strptime("2020-2-20", "%Y-%m-%d") print(t8) """ 时间戳 <---- 元组 时间戳 ----> 字符串 元组 <---> 字符串 """ # 9.休眠 print("start~~~~") # 作用: 会让代码暂停【阻塞】,当指定的时间达到之后,则会自动解除阻塞,代码继续向下执行 time.sleep(5) print("end~~~~")
运行结果
""" 1600594967.5052955 time.struct_time(tm_year=2020, tm_mon=9, tm_mday=20, tm_hour=9, tm_min=42, tm_sec=47, tm_wday=6, tm_yday=264, tm_isdst=0) time.struct_time(tm_year=2020, tm_mon=9, tm_mday=20, tm_hour=17, tm_min=42, tm_sec=47, tm_wday=6, tm_yday=264, tm_isdst=0) 1600594967.0 Sun Sep 20 17:42:47 2020 Sun Sep 20 17:42:47 2020 2020-09-20 time.struct_time(tm_year=2020, tm_mon=2, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=51, tm_isdst=-1) start~~~~ end~~~~ """
1.2使用time模块的小例子
(1)写一个装饰器,可以统计任意一个函数的执行时间
import time def countRunTime(func): def inner(*args, **kwargs): start = time.time() # 调用原函数 func() end = time.time() print("程序执行总花费了:%f秒" % (end - start)) return inner() @countRunTime def testFunc(): print("program ~~~~ strat") time.sleep(5) print("program ~~~ end ")
运行结果:
""" program ~~~~ strat program ~~~ end 程序执行总花费了:5.000759秒 """
(2) 有一个时间字符串,如:1999/9/9,输出三天之后的日期1999/9/12
str1 = "1999/9/9" # 将时间的字符串转换为元组 time1 = time.strptime(str1, "%Y/%m/%d") # 将时间的元组形式转换为时间戳 time2 = time.mktime(time1) # 进行加法运算 time3 = time2 + 3 * 24 * 3600 # 将时间戳转换为时间元组 time4 = time.localtime(time3) # 将时间元组转化为字符串格式 time5 = time.strftime("%Y/%m/%d", time4) print(time5) # 可以简化所有的代码 time_1 = time.strftime("%Y/%m/%d", time.localtime(time.mktime(time.strptime(str1, "%Y/%m/%d")) + 3 * 24 * 3600)) print(time_1)
运行结果:
""" 1999/09/12 1999/09/12 """
datetime模块
import datetime # 1.获取当前时间 d1 = datetime.datetime.now() print(d1) print(type(d1)) """ 2020-09-21 18:06:20.772943 <class 'datetime.datetime'> """ # 2.获取指定时间【年,月,日,时,分,秒,毫秒】 d2 = datetime.datetime(2016, 6, 6, 6, 6, 6, 6666) print(d2) """ 2016-06-06 06:06:06.006666 """ # 3.字符串和datetime类型之间的转换 d3 = datetime.datetime.now() d4 = d3.strftime("%Y/%m/%d") print(d4) print(type(d4)) d5 = datetime.datetime.strptime(d4,"%Y/%m/%d") print(d5) print(type(d5)) """ 2020/09/21 <class 'str'> 2020-09-21 00:00:00 <class 'datetime.datetime'> """ # 4.datetime时间对象之间可以进行减法运算 date1 = datetime.datetime(2016, 6, 6, 6, 6, 6, 6666) date2 = datetime.datetime(2016, 6, 10, 6, 20, 20, 6666) result = date2 - date1 print(result) print(result.days) print(result.seconds) """ 4 days, 0:14:14 4 854 """
calender模块
import calendar # 1.打印某年某月的日历表 print(calendar.month(2016, 10)) """ October 2016 Mo Tu We Th Fr Sa Su 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 """ # 2.直接打印某一年的日历表 print(calendar.calendar(2020)) """ 2016 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 4 5 6 7 8 9 10 8 9 10 11 12 13 14 7 8 9 10 11 12 13 11 12 13 14 15 16 17 15 16 17 18 19 20 21 14 15 16 17 18 19 20 18 19 20 21 22 23 24 22 23 24 25 26 27 28 21 22 23 24 25 26 27 25 26 27 28 29 30 31 29 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 1 1 2 3 4 5 4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12 11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19 18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26 25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30 30 31 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 1 2 3 4 5 6 7 1 2 3 4 4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11 11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18 18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25 25 26 27 28 29 30 31 29 30 31 26 27 28 29 30 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 1 2 3 4 5 6 1 2 3 4 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 31 """ # 3.以二维的列表打印出日历 print(calendar.monthcalendar(2016, 10)) """[[0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0]] """ """ 4.判断某一年是不是闰年 """ print(calendar.isleap(2016)) """ True """