zoukankan      html  css  js  c++  java
  • 08 datetime与logging模块(进阶)

    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)
  • 相关阅读:
    Visual C# 3.0 新特性概览
    一个C#睡前故事[翻译]
    ASP.NET User Control使用技巧一则
    Visual Studio 2005 调试器的新增功能
    .NET Framework 3.0新特性
    客户端提高WEB页面显示速度的方法
    VS.Net 2005中如何:使用“编辑并继续”
    如何在 VS 2005 里调试 Javascript
    关于DotNES
    Sql语句优化汇总(CSDN上的帖子)
  • 原文地址:https://www.cnblogs.com/zcmq/p/9275813.html
Copyright © 2011-2022 走看看