Python简书收藏--Pythonpython知识

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

2017-02-08  本文已影响674人  菜鸟学python

阅读本文大概需要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


上一篇 下一篇

猜你喜欢

热点阅读