08 datetime与logging模块(进阶)
阶段一:日期与时间
1、datetime 模块中 主要类:
类名 | 功能说明 |
---|---|
date | 日期对象,常用的属性有year, month, day |
time | 时间对象hour,minute,second,毫秒 |
datetime | 日期时间对象,常用的属性有hour, minute, second, microsecond |
timedelta | 时间间隔,即两个时间点之间的长度 |
日期: datetime.date( year, month, day )
时间: datetime.time( hour, minute, second,microsecond )
日期时间: datetime.datetime( year, month,day,hour, minute, second, microsecond )
时间间隔 : datetime.timedelta( days=0, seconds=0,microseconds=0, milliseconds=0,minutes=0, hours=0, weeks=0 )
2、datetime.datetime( ) 类中的常用方法:
1、now ():返回当前日期时间的datetime对象:
2、utcnow(…):返回当前日期时间的UTCdatetime对象
3.strptime(…):解析成datetime对象。根据string,format 2个参数,返回一个对应的datetime对象
例子: datetime.datetime.strptime(‘2018-3-22 15:28:18','%Y-%m-%d %H:%M:%S')
4.Strftime():格式化时间
例子:strtime=now.strftime("%Y-%m-%d %H:%M:%S")
5.时间戳转日期时间:t1= datetime.datetime.fromtimestamp(ts)
6日期时间转时间戳:t2=t1.timestamp()
3、时间运算 : ( 返回timedelte() 对象)
timedelta类是用来计算二个datetime对象的差值的。
此类中包含如下属性:
1、days:天数
2、microseconds:微秒数
3、seconds:秒数(>=0 并且 <1天)
4、total_seconds : 总秒数
4、例子
import datetime # 日期 # date = datetime.date(2018,6,19) # print(date) # print(type(date)) # 时间 : : : # t = datetime.time(10,50,30,1000) # print(t) # print(type(t)) # 日期时间 # dt = datetime.datetime(2018,6,19,10,55,30) # 日期必须要有,时间可以没有 # print(dt) # print(type(dt)) # 时间间隔 # dlt = datetime.timedelta(hours=4) # print(dlt) # print(type(dlt)) # print(dt + dlt) # 当前时间 东八区 # now = datetime.datetime.now() # print(now) # 格林威治时间 # utc = datetime.datetime.utcnow() # print(utc) # 北京时间,东八区时间 # delt = datetime.timedelta(hours=8) # bei_jing = utc + delt # print(bei_jing) # 解析时间 # strp = datetime.datetime.strptime('jun-14-18 11:45','%b-%d-%y %H:%M') # print(strp) # 格式化时间 # strf = now.strftime('%Y-%m-%d %H:%M:%S') # print(strf) # 时间戳转换成日期时间 # t = datetime.datetime.fromtimestamp(0) # print(t) # 日期时间转换成时间戳 # t1 = t.timestamp() # print(t1) # 获取datetime对象中数据 now = datetime.datetime.now() # print(now) # 小时 分钟 秒钟 # print(now.hour) # print(now.month) # print(now.day) # 星期 # print(now.weekday()) # 范围0-6 # print(now.isoweekday()) # 范围1-7 # iso标准化日期 isocalendar(...) # year年份,week number 周数,weekday星期 # a = now.isocalendar() # year = now.isocalendar()[0] # weekNum = now.isocalendar()[1] # weekdaY = now.isocalendar()[2] # print(a) # print(year) # print(weekNum) # print(weekdaY) # 计算你出生了多久 def how_long(year,month,day,hour=0,minut=0,second=0): return datetime.datetime.now() - datetime.datetime(year,month,day,hour,minut,second) a = how_long(1997,9,3) print(a)
阶段二:logging模块
1、logging用法
1.初始化 logger = logging.getLogger(“name")
2.设置级别 logger.setLevel(logging.DEBUG),Logging中有NOTSET < DEBUG < INFO <WARNING < ERROR < CRITICAL这几种级别,日志会记录设置级别以上的日志
3.定义Handler,常用的是StreamHandler和FileHandler,
StreamHandler:将日志在控制台输出
FileHandler: 将日志记录到文件里面
4.formatter,定义了log信息的 内容 和格式,
例如:'%(asctime)s %(message)s', '%Y-%m-%d %H:%M:%S'
2、logging 中几种级别
NOTSET < DEBUG < INFO < WARNING< ERROR < CRITICAL
级别 | 何时使用 |
---|---|
DEBUG | 详细信息,典型地调试问题时会感兴趣 |
INFO | 证明事情按照预期工作 |
WARNING | 表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了’)软件还是在正常工作 |
ERROR | 由于更严重的问题,软件已不能执行一些功能了 |
CRITICAL | 严重错误,表明软件已不能继续运行了 |
3、Formatter 中已有格式
%(name)s Logger的名字
%(levelname)s 文本形式的日志级别
%(message)s 用户输出的消息
%(asctime)s 字符串形式的当前时间。默认格式是“2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(levelno)s 数字形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以来的毫秒数
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
4、logging编程范式
import logging # 1.初始化,实例化的过程 logger = logging.getLogger('test_log') # 2.设置级别 logger.setLevel(logging.DEBUG) # 设置最低级别,小于它的级别不会输出 # 3.定义handler # 3.1 控制台输出 sh = logging.StreamHandler() sh.setLevel(logging.ERROR) # error 情况下,就会在控制台输出 # 3.2 写入log文件 fh = logging.FileHandler('test_file') fh.setLevel(logging.DEBUG) # debug 级别以上我就写入log文件里 # 4.定义日志格式,格式化 formatter = logging.Formatter( '时间: &(asctime)s,' '日志级别: %(levelname)s,' '日志消息: %(message)s' ) # 把定义好的格式化添加到我们刚才定义的handler当中去 sh.setFormatter(formatter) fh.setFormatter(formatter) # 将我们的handler添加到logger里面去 logger.addHandler(sh) logger.addHandler(fh) if __name__ == '__main__': # logger.debug('测试') # logger.info('正常运行') # logger.warn('警告') # logger.error('报错') # logger.critical('非常严重的错误') def func(a): try: num = 20/a logger.info(num) # 如果不报错,就正常运行 except Exception as e: logger.error(e) # 如果报错,就把报错信息扔进来,然后返回这个级别 func(0)