python-cookbook学习笔记七
来源:互联网 发布:ubuntu输入法设置 编辑:程序博客网 时间:2024/06/05 11:45
Python中表示时间的模块是datetime,引入下面的模块
from datetime import datetime,timedelta
print datetime.today() #打印出当前的时间
E:\python2.7.11\python.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 nowprint now+relativedelta(years=1,months=1)
可以看到对年和月进行了加1的操作
Relativedelta可以对任意时间单位进行运算。如下
print now+relativedelta(<span lang="EN-US" style="" color:"="">years=1,months=1,hours=1,minutes=1,seconds=1,microseconds=1)
如果我们想任意得到任意两个时间段的差值,该如何操作呢。比如我们想得到2016-7-1和2016-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().yearmonth=datetime.today().monthprint calendar.month(year,month)
打印出某年,某月的日历
打印出某年的日历:
print calendar.calendar(year)
判断是否为闰年:
print calendar.isleap(year)
判断一个月内有多少天
print calendar.monthrange(year,month)
返回结果(5,30)
其中5代表的是当天在本周内的索引。相当于weekday。30则表明这个月有多少天
0 0
- python-cookbook学习笔记七
- Python cookbook 学习笔记一
- python cookbook 学习笔记--1
- [pyhton]python cookbook学习笔记
- python-cookbook学习笔记一
- python-cookbook学习笔记二
- python-cookbook学习笔记三
- python-cookbook学习笔记四
- python-cookbook学习笔记五
- python-cookbook学习笔记六
- python-cookbook学习笔记十一
- 《PHP Cookbook》学习笔记(七)
- python技巧(2):--python cookbook学习笔记
- python技巧(3)--python cookbook学习笔记
- python技巧(4)----python cookbook学习笔记
- Python技巧(6):cookbook学习笔记
- python-cookbook学习笔记十 迭代器 三
- python cookbook学习笔记十二:XML解析
- 1019. 数字黑洞 (20)
- MEMORY主电源电压变化数据(VDD=VDDQ)
- 详解/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc的用途
- Linux入门3(手记)
- Python的基础——Python学习笔记02
- python-cookbook学习笔记七
- git学习总结系列(1)——基本用法
- 一、opencv的图像基本读写
- vue事件对象,冒泡,阻止默认行为
- C语言实例*2
- Error:Execution failed for task ':app:transformNativeLibsWithStripDebugSymbolForDebug'. > java.lang.
- 【Java基础】线程和并发机制
- 总结java中的反射机制
- vue事件简写方式