知行编程网知行编程网  2022-03-01 15:00 知行编程网 隐藏边栏 |   抢沙发  4 
文章评分 0 次,平均分 0.0

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

阅读本文大概需要7分钟

 

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

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

 

一. Time模块

1).time.time()
import time
print time.time()

1486472138.31

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

 

2).计算一百万行代码运行的时间
import time
def <span style="color: #faea29;">calcProd</span>():
   <span style="color: #969696;">#Calculate the product of the first 100,000 numbers
</span><span style="color: #969696;">   </span>product=<span style="color: #6897bb;">1
</span><span style="color: #6897bb;">   </span>for i in <span style="color: #ff6b68;">range</span>(<span style="color: #6897bb;">1</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">100000</span>):
      product=product*i
   return product
startTime=time.time()
prod=calcProd()
endTime=time.time()
print <span style="color: #faea29;">'The result is %s digits long'</span>%(<span style="color: #ff6b68;">len</span>(<span style="color: #ff6b68;">str</span>(prod)))
print <span style="color: #faea29;">'Took %s seconds to calculate'</span>%(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(<span style="color: #6897bb;">2017</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">12</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">25</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">0</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">0</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">0</span>) - 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(<span style="color: #6897bb;">2017</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">2</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">7</span>)
print d3+datetime.timedelta(<span style="color: #b9445f;">days</span>=<span style="color: #6897bb;">100</span>)

>>2017-05-18 00:00:00

计算100天之前是哪天,一样也很简单

d3=datetime.datetime(<span style="color: #6897bb;">2017</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">2</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">7</span>)
print d3-datetime.timedelta(<span style="color: #b9445f;">days</span>=<span style="color: #6897bb;">100</span>)

>>2016-10-30 00:00:00

 

2).计算某两个日期差多少天

d4=datetime.datetime(<span style="color: #6897bb;">2017</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">5</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">1</span>)
d5=datetime.datetime(<span style="color: #6897bb;">2017</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">12</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">25</span>)
print d5-d4

>>238 days, 0:00:00

 

虽然很方便,但是timedelta有一个很大的缺点,不支持月份,天那怎么会这样,莫慌,用神补刀dateutil模块

 

2).dateutil

dateutil是一个非常强大的模块,可以处理复杂的日期问题,比如时区,模糊时间范围,计算时间日期,下面是就是处理按月份的.

import dateutil<span style="color: #cc7832;">,</span>datetime
d1=datetime.datetime(<span style="color: #6897bb;">2017</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">12</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">7</span>)
print d1+dateutil.relativedelta.relativedelta(<span style="color: #b9445f;">months</span>=<span style="color: #6897bb;">3</span>)

>>2018-03-07 00:00:00

 

print d1-dateutil.relativedelta.relativedelta(<span style="color: #b9445f;">months</span>=<span style="color: #6897bb;">20</span>)

>>2016-04-07 00:00:00

 

四.  日历

日历是也时间处理里面非常用的一块,Python里有一个calendar模块,内置很多高大上的函数模块

1)打印某年某月的日历

比如我们要打印2017月2月的

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

2).计算本月的最后一天

import calendar<span style="color: #cc7832;">,</span>datetime
today = datetime.date.today()
_<span style="color: #cc7832;">, </span>last_day_num = calendar.monthrange(today.year<span style="color: #cc7832;">, </span>today.month)
print last_day_num

>>28

3).计算10年以来2月份的天数,有多少闰年

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

也可以简单的表示:

print [year for year in <span style="color: #ff6b68;">range</span>(<span style="color: #6897bb;">2008</span><span style="color: #cc7832;">,</span><span style="color: #6897bb;">2018</span>) if calendar.monthrange(year<span style="color: #cc7832;">, </span><span style="color: #6897bb;">2</span>)[<span style="color: #6897bb;">1</span>]==<span style="color: #6897bb;">29</span>]

>>[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
<span style="background-color: #40332b;">cday</span> = datetime.strptime(<span style="color: #faea29;">'2017-2-6 18:19:59'</span><span style="color: #cc7832;">, </span><span style="color: #faea29;">'%Y-%m-%d %H:%M:%S'</span>)
print <span style="background-color: #344134;">cday</span><span style="color: #cc7832;">,</span><span style="color: #ff6b68;">type</span>(<span style="background-color: #344134;">cday</span>)

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

转成了一个datetime的类了

2).把日期转字符串

from datetime import datetime
now = datetime.now()
print(now.strftime(<span style="color: #faea29;">'%a, %b %d %H:%M'</span>))

>>Tue, Feb 07 22:34

 

 


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

人气历史文章

Python入门原创文章,2016年度大盘点

2016年度【菜鸟学Python】-最高人气文章

Python语言如何入门

一张图搞定-Python文件常用的场景和用法

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享