python cookbook第三版学习笔记五:datetime
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 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-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().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则表明这个月有多少天
python cookbook第三版学习笔记五:datetime的更多相关文章
- python cookbook第三版学习笔记十:类和对象(一)
类和对象: 我们经常会对打印一个对象来得到对象的某些信息. class pair: def __init__(self,x,y): self.x=x self. ...
- python cookbook第三版学习笔记十五:property和描述
8.5 私有属性: 在python中,如果想将私有数据封装到类的实例上,有两种方法:1 单下划线.2 双下划线 1 单下划线一般认为是内部实现,但是如果想从外部访问的话也是可以的 2 双下划线是则无法 ...
- python cookbook第三版学习笔记十四:类和对象(五)代理类以及内存回收
代理类: 代理类的作用其实有继承有些类似,如果你想将某个实例的属性访问代理到内部另外一个实例中去,可以用继承也可以用代理.来看下代理的应用: class A: def spam(self,x) ...
- python cookbook第三版学习笔记六:迭代器与生成器
假如我们有一个列表 items=[1,2,3].我们要遍历这个列表我们会用下面的方式 For i in items: Print i 首先介绍几个概念:容器,可迭代对象,迭代器 容器是一种存储数据 ...
- python cookbook第三版学习笔记 一
数据结构 假设有M个元素的列表,需要从中分解出N个对象,N<M,这会导致分解的值过多的异常.如下: record=['zhf','zhf@163.com','775-555-1212','847 ...
- python cookbook第三版学习笔记十三:类和对象(三)描述器
__get__以及__set__:假设T是一个类,t是他的实例,d是它的一个描述器属性.读取属性的时候T.d返回的是d.__get__(None,T),t.d返回的是d.__get__(t,T).说法 ...
- python cookbook第三版学习笔记二十:可自定义属性的装饰器
在开始本节之前,首先介绍下偏函数partial.首先借助help来看下partial的定义 首先来说下第一行解释的意思: partial 一共有三个部分: (1)第一部分也就是第一个参数,是一个函数, ...
- python cookbook第三版学习笔记十六:抽象基类
假设一个工程中有多个类,每个类都通过__init__来初始化参数.但是可能有很多高度重复且样式相同的__init__.为了减少代码.我们可以将初始化数据结构的步骤归纳到一个单独的__init__函数中 ...
- python cookbook第三版学习笔记七:python解析csv,json,xml文件
CSV文件读取: Csv文件格式如下:分别有2行三列. 访问代码如下: f=open(r'E:\py_prj\test.csv','rb') f_csv=csv.reader(f) for f in ...
随机推荐
- 2016集训测试赛(二十)Problem B: 字典树
题目大意 你们自己感受一下原题的画风... 我怀疑出题人当年就是语文爆零的 下面复述一下出题人的意思: 操作1: 给你一个点集, 要你在trie上找到所有这样的点, 满足点集中存在某个点所表示的字符串 ...
- Working With Push Buttons In Oracle Forms
Managing push buttons at run time in Oracle Forms is very simple and in this tutorial you will learn ...
- VS2010中 打开vc6.0的工程时,遇到的问题及解决办法
用VS2010打开vc6.0的工程时,遇到了很多的问题,下面记录下解决办法. 1. 报错: error C2065: “i”: 未声明的标识符 解决办法: 提出 i 的申明,因为 i 的申明可能在fo ...
- 2017.2.13 开涛shiro教程-第十二章-与Spring集成(一)配置文件详解
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第十二章-与Spring集成(一)配置文件详解 1.pom.xml ...
- 2016.11.10 Could not get JDBC Connection; nested exception is java.sql.SQLException: No suitable driver
运行项目rds_web时,出现错误提示:Could not get JDBC Connection; nested exception is java.sql.SQLException: No sui ...
- 各类免费的API接口分享,无限次
各类免费的API接口分享: 手机号码归属地API:https://www.juhe.cn/docs/api/id/11 历史上的今天API:https://www.juhe.cn/docs/api/i ...
- vue.js+koa2项目实战(一)创建项目和elementUI配置
前端采用vuex+element-ui: 后端采用koa2+restfulAPI+sequlize: (一)项目介绍 宠物社区 1.社区 2.好友 3.说说 4.宠粮 5.健康 (二)项目框架 1.V ...
- beforeRouteLeave 实现vue路由拦截浏览器的需求,进行一系列操作 草稿保存等等
场景:为了防止用户失误点错关闭按钮等等,导致没有保存已输入的信息(关键信息).用法://在路由组件中: beforeRouteLeave (to, from, next) { if(用户已经输入信息) ...
- storm - 可靠机制
一 可靠性简单介绍 Storm的可靠性是指Storm会告知用户每个消息单元是否在一个指定的时间(timeout)内被全然处理. 全然处理的意思是该MessageI ...
- [读书笔记] learn python the hard way书中 有关powershell 的一些小问题
ex46中,创建自己的python, 当你激活环境时 .\.venvs\lpthw\ Scripts\activate 会报一个错误 此时需要以管理员身份运行PowerShell,(当前的PS不用关 ...