都说Python时间处理很好玩还简单,真的吗

浏览: 1692

这是菜鸟学Python的第51篇原创文章

阅读本文大概需要7分钟

     Python里还有一块东西没有讲,比如装饰器,生成器,多进程多线程,输入输出,时间处理,如何发布一个python应用程序,如果这些重要的知识不讲,我都觉得对不起"菜鸟学python"这块招牌,我还是先把这些讲完了,算是Python相关的知识的一个完整系列,之后再讲下一个系列.

今天我们先聊有趣的时间处理(有同学问时间处理有啥用啊),有用啊.比如我自己写的金融爬虫小系统,对基金股票的数据爬取然后进行智能分析,还有定时批处理程序,也需要用时间处理,时间处理也是和日常工作密切相关的,下面我们就来分5点讲讲~~

Clipboard Image.png

模块

1).time.time()

import time
print time.time()

1486472138.31

表示从1970年到当前时间一共的秒数

2).计算一百万行代码运行的时间

import time
def calcProd():
#Calculate the product of the first 100,000 numbers
  product=1
  for i in range(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)

Clipboard Image.png

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

Clipboard Image.png

时间的加减

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

Clipboard Image.png

日历

日历是也时间处理里面非常用的一块,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 in range(2008,2018) if calendar.monthrange(year, 2)[1]==29]

>>[2008, 2012, 2016]

Clipboard Image.png

字符串和日期的转换

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')
print cday,type(cday)

>>2017-02-06 18:19:59,<type 'datetime.datetime'>

转成了一个datetime的类了

2).把日期转字符串

from datetime import datetime
now = datetime.now()
print(now.strftime('%a, %b %d %H:%M'))

>>Tue, Feb 07 22:34


好了Python中的时间处理开篇就讲到这里啦,希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流.

最后说一下,原创真的不易,欢迎转发转发转发,留言留言留言,重要的事情说三遍,也是对我的一点鼓励和动力.

也欢迎更多喜欢Python的同学关注 菜鸟学python,一起来学python吧 长按下方的二维码即可关注.


长按识别二维码关注【菜鸟学python】




推荐 0
本文由 菜鸟学Python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册