zoukankan      html  css  js  c++  java
  • python cookbook第三版学习笔记五:datetime

    Python中表示时间的模块是datetime,引入下面的模块
    from datetime import datetime,timedelta
    print datetime.today()  #打印出当前的时间
    E:python2.7.11python.exe E:/py_prj/python_cookbook.py
    2017-04-26 21:58:05.663000
    我们还可以对时间进行加减操作。这里要用到timedelta模块
    这个模块有5个重要参数分别是days,minutes,seconds,hours,weeks,microseconds
    timedelta(days=XX,minutes=XX,seconds=XX,hours=XX,weeks=XX,microseconds=XX)
    因此可以根据这些参数来对时间进行加减
    print datetime.today()
    print datetime.today()+timedelta(days=1,minutes=1,seconds=1,hours=1,microseconds=1)
    得到如下的结果,可以看到天数,分钟,秒,小时,微秒都在之前的基础上加了1. 如果要以周为单位的话可以用timedelta(weeks=1)


    Timedelta最大也只能进行周为单位的增加,如果想对日期进行月以及年的加减。改如何操作呢。这就要用到如下的模块
    from dateutil.relativedelta import relativedelta
    now=datetime.today()
    print now
    print now+relativedelta(years=1,months=1)
    可以看到对年和月进行了加1的操作

    Relativedelta可以对任意时间单位进行运算。如下
    print now+relativedelta(years=1,months=1,hours=1,minutes=1,seconds=1,microseconds=1)

    如果我们想任意得到任意两个时间段的差值,该如何操作呢。比如我们想得到2016-7-12016-8-5之间差了多少多久
    首先需要对日期进行格式化:下面表示2016-07-01 14:20和2016-08-05 15:10
    t1=datetime(2016,7,1,14,20)
    t2=datetime(2016,8,5,15,10)
    relativedelta进行时间比较
    d=relativedelta(t2,t1)
    print d
    得到如下结果。可以看到返回的是一个relativedelta对象,其中包括了时间差。这个运算顺序是t2-t1


    返回的是对象不太直观,如何得到具体的时间差距呢:
    print d.months,d.days,d.minutes
    得到1 4 50.
     
    介绍了这么多时间模块的用法,我们来写一个实现:比如今天是周三,我想得到上个周一的日期是多少。
    实现如下:
    def get_previous_day(dayname):
    #首先创建出一个列表,里面包含周一到周日   weekdays=['Monday','Tuesday','wednesday','Thursday','Friday','Saturday','Sunday']
        start_date=datetime.today()
    #weekday的作用是得出当日在这周中的索引。比如周一到周日的索引分别是0-6. 
        day_num=start_date.weekday()
    #得到目标日期的索引
        day_num_target=weekdays.index(dayname)
    #求得日期的差距,如果差距是0,则days_ago=7,表示正好相差一个星期
        days_ago=(7+day_num-day_num_target)%7
        if days_ago == 0:
            days_ago=7
        target_date=start_date-timedelta(days=days_ago)
        print target_date
    if __name__=='__main__':
    #找到上一个周一的时间
        get_previous_day('Monday')
    得到如下的结果。

    其实我们还有一个更简单的方法。首先引用dateutil.rrule
    其中MO,TU,WE,TH,FR,SA,SU分别代表周一到周日。其实就是英文表示的前2位大写字母
    from dateutil.rrule import *
    now=datetime.today()
    print now
    #下一个周一
    print now+relativedelta(weekday=MO)
    #下下的周一
    print now+relativedelta(weekday=MO(+2))
    #上一个周一
    print now+relativedelta(weekday=MO(-1))
    #上上个周一
    print now+relativedelta(weekday=MO(-2))
    结果如下:

    下面介绍另外一个日历模块。calendar
    先看下面的用法:
    year=datetime.today().year
    month=datetime.today().month
    print calendar.month(year,month)
    打印出某年,某月的日历

    打印出某年的日历:
    print calendar.calendar(year)

    判断是否为闰年:
    print calendar.isleap(year)
    判断一个月内有多少天
    print calendar.monthrange(year,month)
    返回结果(5,30)
    其中5代表的是当天在本周内的索引。相当于weekday。30则表明这个月有多少天
    
    
    
    
    
    
    
    
     
    
    
     
  • 相关阅读:
    selenium中PO模式(Page Object Model)小结
    Selenium webdriver中的xpath定位
    使用cookie实现自动化测试中的自动登录
    Cookie、Session实现“记住登录状态”的原理
    关于移动端文字无法垂直居中(或line-height不起作用)的问题的解决方案(网摘)
    nginx+thinkphp pathinfo模式配置
    ThinkPHP5 安装自定义模块
    腾讯云ubuntu memcached 安装
    腾讯云centos+nginx+nodejs proxy代理配置
    阿里云nginx+thinkphp环境运行会直接下载php文件的问题。
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/7113472.html
Copyright © 2011-2022 走看看