Python日期时间

python 内置的几个关于时间的模块,time timeit datetime calendar --- ## time 模块

time 模块
# coding:utf-8 # time 模块 import time # 1. time.time() print(time.time()) # time.time() 返回当前时间戳 # >: 1624126357 # 2. time.localtime() print(time.localtime()) # time.localtime() 返回当前时间结构元组 # >: time.struct_time(tm_year=2021, tm_mon=6, tm_mday=20, tm_hour=2, tm_min=12, tm_sec=37, tm_wday=6, tm_yday=171, tm_isdst=0) # 3. time.ctime() 时间戳->日期 print(time.ctime()) # time.ctime() 返回当前日期 # >: Sun Jun 20 02:12:37 2021 # 4. time.asctime() 结构元组->日期 print(time.asctime((2021, 6, 20, 2, 12, 37, 6, 171, 0))) # time.asctime() 返回一个可读的形式 # >: Sun Jun 20 02:12:37 2021 print(time.ctime(1624126357)) # 返回该时间戳的日期 # >: Sun Jun 20 02:12:37 2021 # 5. tiem.gmtime() 时间戳->结构元组 print(tiem.gmtime(1624126357.0)) # # >: time.struct_time(tm_year=2021, tm_mon=6, tm_mday=20, tm_hour=2, tm_min=12, tm_sec=37, tm_wday=6, tm_yday=171, tm_isdst=0) # 6. time.mktime() 结构元组->时间戳 print(time.mktime( (2021, 6, 20, 2, 12, 37, 6, 171, 0) )) # time.mktime() 返回时间结构元组的时间戳 # >: 1624126357.0 print(time.localtime(1624126357)) # 返回传入的时间戳的时间结构元组 # >: time.struct_time(tm_year=2021, tm_mon=6, tm_mday=20, tm_hour=2, tm_min=12, tm_sec=37, tm_wday=6, tm_yday=171, tm_isdst=0) # 7. time.strftime() 时间元组->指定的格式 print(time.strftime("%Y-%m-%d %H:%M:%S",)) # time.strftime() 格式化输出当前时间 # 8. time.strptime() 指定的格式->时间元组 print(time.strptime("30 Nov 00", "%d %b %y")) # >: time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1) # 时间日期格式化符号:https://www.runoob.com/python/att-time-strptime.html # 9. time.sleep(:int) time.sleep(2) # time.sleep(2) selenium中常用的休眠,休眠2秒 # 10. time.perf_counter() T1 = time.perf_counter() #______假设下面是程序部分______ for i in range(100*100): pass T2 =time.perf_counter() print('程序运行时间:%s毫秒' % ((T2 - T1)*1000)) # 11. time.process_time() T1 = time.process_time() # time.process_time() 不包括sleep()休眠时间;需要调用两次,做差值 #______假设下面是程序部分______ for i in range(100*100): pass T2 =time.process_time() print('程序在CPU运行时间:%s毫秒' % ((T2 - T1)*1000))

timeit 模块

timeit 模块
# coding:utf-8 # timeit 模块 性能分析 import timeit # 待测试的函数 def add(): return sum(range(111)) # stmt 需要测试的函数或语句,字符串形式 # setup 运行的环境,本例子中表示 if __name__ == '__main__': # number 被测试的函数或语句,执行的次数,本例表示执行100000次add()。省缺则默认是10000次 # repeat 测试做100次 # 综上:此函数表示 测试 在if __name__ == '__main__'的条件下,执行100000次add()消耗的时间,并把这个测试做100次,并求出平均值 t = timeit.timeit(stmt="add()", setup="from __main__ import add", number=100000) t = timeit.repeat(stmt="add()", setup="from __main__ import add", number=100000, repeat=100) print(t) print(sum(t) / len(t))

datetime 模块

datetime 模块
# coding:utf-8 # datetime 模块 from datetime import datetime # 1. datetime.now() print(datetime.now()) # datetime.now() 返回当前日期和时间 [datetime 类型] # >: 2021-06-20 02:12:37 # 2. datetime() print(datetime(2021, 6, 20, 2, 12, 37, 6)) # datetime() 返回指定日期和时间 [datetime 类型] # >: 2021-06-20 02:12:37.000006 # 3. datetime().timestamp() print(datetime(2021, 6, 20, 2, 12, 37, 6).timestamp()) # datetime().timestamp() [datetime 类型]转换为本地时区timestamp # >: 1624126357.000006 # 4. datetime.fromtimestamp(t) t = datetime(2021, 6, 20, 2, 12, 37, 6).timestamp() print(datetime.fromtimestamp(t)) # datetime.fromtimestamp(t) 本地时区timestamp[t]转换为[datetime 类型] # >: 2021-06-20 02:12:37.000006 # 5. datetime.utcfromtimestamp(t) t = datetime(2021, 6, 20, 2, 12, 37, 6).timestamp() print(datetime.utcfromtimestamp(t)) # datetime.utcfromtimestamp(t) UTC标准时区timestamp[t]转换为[datetime 类型] # >: 2021-06-19 18:12:37.000006 # 6. strptime() # datetime.strptime() 字符串日期和时间转成[datetime 类型] # 格式说明: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior print(datetime.strptime('2021-6-20 02:12:37', '%Y-%m-%d %H:%M:%S')) # >: 2021-06-20 02:12:37 # 6. strftime() dt = datetime(2021,6,20,2,12,37,6) print(dt.strftime(''' 本地时间 %c 星期 , 月 , 日 , 日期 ,时:分:秒 %A(%a), %B(%b) %d , %x , %X 日期时间24小时制 %d/%m/%y %H:%M:%S %z 日期时间12小时制 %Y-%m-%d %p. %I:%M:%S 第 %j 天 第 %U 个星期, 星期 %w [日始0-6] 第 %W 个星期, 星期 %u [一始1-7] ''')) # datetime.strftime() [datetime 类型]转成字符串日期和时间. # 7. timedelta # 对日期和时间进行加减,可以直接用+和-运算符 from datetime import datetime, timedelta dt = datetime(2021, 6, 20, 2, 12, 37, 6) dt = dt + timedelta(hours=10) # 8. timezone from datetime import datetime, timedelta, timezone tz_utc_8 = timezone(timedelta(hours=8)) # 创建时区UTC+8:00 now = datetime.now() dt = now.replace(tzinfo=tz_utc_8) # 强制设置为UTC+8:00 # 9. astimezone utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc) # 获取UTC时间,并强制设置时区为UTC+0:00: bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8))) # astimezone()将转换时区为北京时间: tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9))) # 将转换时区为东京时间 tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9))) # 将bj_dt转换时区为东京时间 # ** 假设你获取了用户输入的日期和时间如2015-1-21 9:01:30,以及一个时区信息如UTC+5:00,均是str,请编写一个函数将其转换为timestamp: # -*- coding:utf-8 -*- import re from datetime import datetime, timezone, timedelta def to_timestamp(dt_str, tz_str): i_utc = int(re.match( r'UTC(.*):00', tz_str).group(1)) tz_utc = timezone(timedelta(hours=i_utc)) dt= datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S') dt = dt.replace(tzinfo=tz_utc) # 强制设置为UTC+X:00 return dt.timestamp() # 测试: t1 = to_timestamp('2015-6-1 08:10:30', 'UTC+7:00') assert t1 == 1433121030.0, t1 t2 = to_timestamp('2015-5-31 16:10:30', 'UTC-09:00') assert t2 == 1433121030.0, t2 print('ok')

calendar 模块

calendar 模块
# coding:utf-8 # calendar 模块 处理年历和月历 import calendar # 1. calendar.calendar(year,w=2,l=1,c=6) print(calendar.calendar(2021,w=2,l=1,c=7)) # 3个月一行,间隔距离为c,每日宽度间隔为w字符,l是每星期行数。每行长度为21* W+18+2* C # 相当于 calendar.prcal(year,w=2,l=1,c=6) # 2. calendar.month(year,month,w=2,l=1) print(calendar.month(2021,6,w=2,l=1)) # 一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。 # 相当于 calendar.prmonth(year,month,w=2,l=1) # 3. calendar.weekday(year,month,day) print(calendar.weekday(2021,6,20)) # calendar.weekday() 0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。 # >: 6 # 解释:星期日 # 4. calendar.firstweekday() print(calendar.firstweekday()) # calendar.firstweekday() 返回当前每周起始日期的设置,默认返回0,即星期一 # >: 0 # 5. calendar.isleap(year) print(calendar.isleap(2020)) # calendar.isleap(year) 闰年返回 True,否则为 false。 # >: True # 6. calendar.leapdays(y1,y2) calendar.leapdays(1900,2020) # 返回在[Y1,Y2)两年之间的闰年总数 # >: 29 # 7. calendar.monthrange(year,month) print(calendar.monthrange(2021,6)) # >: (1,30) # 解释:1 表示 2021 年 6 月份的第一天是周一,30 表示 2021 年 6 月份总共有 30 天。 # 8. calendar.setfirstweekday(weekday) calendar.setfirstweekday(1) # 设置每周的起始日期码。0(星期一)到6(星期日)。