阅读本文大概需要7分钟
Python里还有一块东西没有讲,比如装饰器,生成器,多进程多线程,输入输出,时间处理,如何发布一个python应用程序,如果这些重要的知识不讲,我都觉得对不起"菜鸟学python"这块招牌,我还是先把这些讲完了,算是Python相关的知识的一个完整系列,之后再讲下一个系列.
今天我们先聊有趣的时间处理(有同学问时间处理有啥用啊),有用啊.比如我自己写的金融爬虫小系统,对基金股票的数据爬取然后进行智能分析,还有定时批处理程序,也需要用时间处理,时间处理也是和日常工作密切相关的,下面我们就来分5点讲讲~~
一. Time模块
1).time.time()
import time
print time.time()
1486472138.31
表示从1970年到当前时间一共的秒数
2).计算一百万行代码运行的时间
import time
defcalcProd():
#Calculate the product of the first 100,000 numbers
product=1
for i inrange(1,100000):
product=product*i
return product
startTime=time.time()
prod=calcProd()
endTime=time.time()
print'The result is %s digits long'%(len(str(prod)))
print'Took %s seconds to calculate'%(endTime-startTime)
>>
The result is 456569 digits long
Took 5.73000001907 seconds to calculate
3).time.sleep()
很多时候我们需要定时去处理一些事情,最简单直接的就用sleep(),比如定时1个小时
time.sleep(3600)
二. datetime
time模块虽然很好,但是很多都是跟unix相关的,有木有接地气的时间模块呢,当然有啦datetime就是这样一个亲民的方便的模块.
1).获取当前的时间
import datetime
print datetime.datetime.now()
>>2017-02-06 21:17:32.329000
2).获取当前的日期
import datetime
print datetime.date.today()
>>2017-02-06
3).获得离圣诞节的时间差
chrismas_day_gap=datetime.datetime(2017,12,25,0,0,0) - datetime.datetime.now()
print chrismas_day_gap
>>321 days, 1:39:26.341000
三. 时间的相加/相减
1. datetime里面有一个非常重要的模块叫timedelta,可以让时间的处理变的很灵活
1).计算当天日期,前后的100天
我们先创建一个datetime.datetime的类,并在入参数里面填入当前的时间,比如2017,2,7,然后用这个datetime object就可以愉快的进行很多操作了
d3=datetime.datetime(2017,2,7)
print d3+datetime.timedelta(days=100)
>>2017-05-18 00:00:00
计算100天之前是哪天,一样也很简单
d3=datetime.datetime(2017,2,7)
print d3-datetime.timedelta(days=100)
>>2016-10-30 00:00:00
2).计算某两个日期差多少天
d4=datetime.datetime(2017,5,1)
d5=datetime.datetime(2017,12,25)
print d5-d4
>>238 days, 0:00:00
虽然很方便,但是timedelta有一个很大的缺点,不支持月份,天那怎么会这样,莫慌,用神补刀dateutil模块
2).dateutil
dateutil是一个非常强大的模块,可以处理复杂的日期问题,比如时区,模糊时间范围,计算时间日期,下面是就是处理按月份的.
import dateutil,datetime
d1=datetime.datetime(2017,12,7)
print d1+dateutil.relativedelta.relativedelta(months=3)
>>2018-03-07 00:00:00
print d1-dateutil.relativedelta.relativedelta(months=20)
>>2016-04-07 00:00:00
四. 日历
日历是也时间处理里面非常用的一块,Python里有一个calendar模块,内置很多高大上的函数模块
1)打印某年某月的日历
比如我们要打印2017月2月的
2).计算本月的最后一天
import calendar,datetime
today = datetime.date.today()
_,last_day_num = calendar.monthrange(today.year,today.month)
print last_day_num
>>28
3).计算10年以来2月份的天数,有多少闰年
也可以简单的表示:
print [year for year inrange(2008,2018) if calendar.monthrange(year,2)[1]==29]
>>[2008, 2012, 2016]
五. 字符串和日期的转换
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
光知道上面这些不够,还必须用datetime里的一个很重要的模块strftime()才能搞定
1).把字符串转日期:
from datetime import datetime
cday= datetime.strptime('2017-2-6 18:19:59','%Y-%m-%d %H:%M:%S')
printcday,type(cday)
>>2017-02-06 18:19:59,
转成了一个datetime的类了
2).把日期转字符串
from datetime import datetime
now = datetime.now()
print(now.strftime('%a, %b %d %H:%M'))
>>Tue, Feb 07 22:34
网友评论