第 5 天 python的时间函数、logging日志

一、时间函数

1.计算两个日期相差天数的计算 

1 >>> import datetime
2 >>> d1 = datetime.datetime(2016, 2, 16)
3 >>> d2 = datetime.datetime(2016, 2, 23)
4 >>> (d2-d1).days
5 7
6 >>> 

 

  

2.计算两个时间相差的秒数

1 >>> import datetime
2 >>> starttime = datetime.datetime.now()
3 >>> endtime = datetime.datetime.now()
4 >>> (endtime - starttime).seconds
5 4
6 >>> 

 

 

3.计算当前时间向后12小时的时间

1 >>> import datetime
2 >>> d1 = datetime.datetime.now()
3 >>> d2 = d1 + datetime.timedelta(hours=12)
4 >>> d2.ctime()
5 'Fri Feb 26 07:58:41 2016'
6 >>> 

 

4.日期的操作必须使用time或datetime库

1 >>> import time 
2 >>> da="2016-1-2"
3 >>> time.strptime(da,"%Y-%m-%d")
4 time.struct_time(tm_year=2016, tm_mon=1, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=2, tm_isdst=-1)
5 >>>

这是将字符串格式的日期及时间转成日期对象
转义符对应意义如下
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%j 年内的一天(001-366)
%m 月份(01-12)
%M 分钟数(00=59)
%p 本地A.M.或P.M.的等价符
%S 秒(00-59)
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%Z 当前时区的名称
%% %号本身

 

5.时间戳与字符串间的转换

#将"2011-09-28 10:00:00"转化为时间戳

 1 >>> import time 
 2 >>> a = "2016-02-22 00:00:00"
 3 >>> b = "2016-01-22 00:00:00"
 4 >>> aa = time.mktime(time.strptime(a,'%Y-%m-%d %H:%M:%S')) #1456070400.0
 5 >>> print(aa)
 6 1456070400.0
 7 >>> bb = time.mktime(time.strptime(b,'%Y-%m-%d %H:%M:%S')) #1453392000.0
 8 >>> print(bb)
 9 1453392000.0
10 >>> print((aa- bb)/3600/24)#31.0 将时间转换为天数
11 >>> 31.0 12

 

#将时间戳转化为localtime

1 >>> import time 
2 >>> x = time.localtime(1317091800.0)#localtime参数为float类型,这里1317091800.0为float类型
3 >>> print(time.strftime('%Y-%m-%d %H:%M:%S',x)) #2011-09-27 10:50:00
4 2011-09-27 10:50:00
5 >>> 
 1 >>> import datetime
 2 
 3 >>> datetime.date(datetime.date.today().year,datetime.date.today().month,1) 
 4 datetime.date(2016, 2, 1) #当月1号 
 5  6 >>> datetime.date.today().replace(day=1)  #当月1号
 7 datetime.date(2016, 2, 1)
 8 >>> (datetime.date.today().replace(day=1) - datetime.timedelta(1)).replace(day=1) #上月1号
 9 datetime.date(2016, 1, 1)
10 >>> 
11 >>> i = datetime.datetime.now()
12 >>> print ("%s-%s-%s" % (i.year,(i.month+1),"10")) #下个月
13 2016-3-10
14 >>> 

 二、logging日志

 1 #!/uer/bin/env python
 2 #-*- coding:utf-8 -*-
 3 
 4 import logging
 5 
 6 #创建日志
 7 logger = logging.getLogger('user_login-LOG')
 8 logger.setLevel(logging.INFO)
 9 
10 
11 # create console handler and set level to debug
12 # 创建控制台处理程序 和设置 debug级别
13 ch = logging.StreamHandler()
14 ch.setLevel(logging.DEBUG)
15 
16 # create file handler and set level to warning
17 # 创建文件处理程序并设置warning警告级别
18 fh = logging.FileHandler("access.log")
19 # fh.setLevel(logging.WARNING) #把WARNING级别以上的日志写到 日志文件中
20 fh.setLevel(logging.INFO) ##把INFO 级别以上的日志写到 日志文件中去
21 # fh.setLevel(logging.DEBUG)
22 
23 # create formatter
24 # 创建格式化程序
25 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
26 
27 # add formatter to ch and fh
28 # 格式化ch 和 fh
29 # ch.setFormatter(formatter)
30 fh.setFormatter(formatter)
31 
32 # add ch and fh to logger
33 # 添加ch 和 fh 的日志记录
34 # logger.addHandler(ch) #显示在控制台上
35 logger.addHandler(fh)
36 
37 # 'application' code
38 # 日志记录内容
39 # logger.debug('1、debug message') #记录debug级别的信息
40 logger.info('2、info message') ##记录info级别的信息
41 # logger.warn('3、warn message') #记录warn级别的信息
42 # logger.error('4、error message') #记录error级别的信息
43 # logger.critical('5、critical message') #记录critical级别的信息

三、 logging模块的使用: (控制台无日志输出)

 1 import logging
 2 import datetime
 3 
 4 log_file = "%s%s%s"%('logs/ftp_',datetime.date.today(),'.log')
 5 logging.basicConfig(filename=log_file,
 6                     format='%(asctime)s - %(name)s - %(levelname)s - %(module)s :%(message)s',
 7                     datefmt='%Y-%m-%d %H:%M:%S %p',
 8                     level=10)
 9 
10 def exit(self,user_data):
11         send_str=("%s"%"301|").encode()
12         self.request.send(send_str)
13         self.handle()
14         mes = "%s,%s"%(user_data,'logout')
15         logging.info(mes)

 日志输出效果:

2016-03-19 12:01:38 PM - root - INFO - SocketServer :alex, login successful!
2016-03-19 12:01:41 PM - root - INFO - SocketServer :alex command ls
2016-03-19 12:02:17 PM - root - INFO - SocketServer :alex, login successful!
2016-03-19 12:03:41 PM - root - INFO - SocketServer :alex command ls

posted @ 2016-02-26 01:33  芳草天涯  阅读(3218)  评论(0编辑  收藏  举报