python-cookbook学习笔记七

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(<span lang="EN-US" style="" color:"="">years=1,months=1,hours=1,minutes=1,seconds=1,microseconds=1)

如果我们想任意得到任意两个时间段的差值,该如何操作呢。比如我们想得到2016-7-12016-8-5之间差了多少多久
首先需要对日期进行格式化:下面表示2016-07-01 14202016-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代表的是当天在本周内的索引。相当于weekday30则表明这个月有多少天

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第一章:数据结构和算法 13 1.1 解压序列赋值给多个变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.2 解压可迭代对象赋值给多个变量 . . . . . . . . . . . . . . . . . . . . . . . 14 1.3 保留最后 N 个元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.4 查找最大或最小的 N 个元素 . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.5 实现一个优先级队列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.6 字典中的键映射多个值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.7 字典排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.8 字典的运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.9 查找两字典的相同点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.10 删除序列相同元素并保持顺序 . . . . . . . . . . . . . . . . . . . . . . . . 28 1.11 命名切片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.12 序列中出现次数最多的元素 . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.13 通过某个关键字排序一个字典列表 . . . . . . . . . . . . . . . . . . . . . 32 1.14 排序不支持原生比较的对象 . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.15 通过某个字段将记录分组 . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.16 过滤序列元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 1.17 从字典中提取子集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 1.18 映射名称到序列元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 1.19 转换并同时计算数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 1.20 合并多个字典或映射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 第二章:字符串和文本 47 2.1 使用多个界定符分割字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.2 字符串开头或结尾匹配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.3 用 Shell 通配符匹配字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.4 字符串匹配和搜索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.5 字符串搜索和替换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.6 字符串忽略大小写的搜索替换 . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.7 最短匹配模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.8 多行匹配模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.9 将 Unicode 文本标准化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 2.10 在正则式中使用 Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 2.11 删除字符串中不需要的字符 . . . . . . . . . . . . . . . . . . . . . . . . . 61 2.12 审查清理文本字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.13 字符串对齐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 2.14 合并拼接字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 2.15 字符串中插入变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 2.16 以指定列宽格式化字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 2.17 在字符串中处理 html 和 xml . . . . . . . . . . . . . . . . . . . . . . . . . 73 2.18 字符串令牌解析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 2.19 实现一个简单的递归下降分析器 . . . . . . . . . . . . . . . . . . . . . . . 77 2.20 字节字符串上的字符串操作 . . . . . . . . . . . . . . . . . . . . . . . . . 85 第三章:数字日期和时间 88 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿与代码

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值