美文网首页Python简书收藏--Pythonpython知识
都说Python时间处理很好玩还简单,真的吗

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

作者: 菜鸟学python | 来源:发表于2017-02-08 22:18 被阅读674次

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


    相关文章

      网友评论

        本文标题:都说Python时间处理很好玩还简单,真的吗

        本文链接:https://www.haomeiwen.com/subject/sgbbittx.html