datetime.timedelta对象代表两个时间之间的的时间差,两个date或datetime对象相减时可以返回一个timedelta对象。
 
构造函数
class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
所有参数可选,且默认都是0,参数的值可以是整数,浮点数,正数或负数。
 
内部只存储days,seconds,microseconds,其他参数的值会自动按如下规则抓转换:
 
  • 1 millisecond(毫秒) 转换成 1000 microseconds(微秒)
  • 1 minute 转换成 60 seconds
  • 1 hour 转换成 3600 seconds
  • 1 week转换成 7 days
三个参数的取值范围分别为:
 
  • 0 <= microseconds < 1000000
  • 0 <= seconds < 3600*24 (the number of seconds in one day)
  • -999999999 <= days <= 999999999
如果任意参数是float,且小数点后含有microseconds部分,那么microseconds的值为所有参数的微秒部分的总和(四舍五入)如:
  1. >>> datetime.timedelta(hours=1.232,seconds=20).microseconds
  2. 200000
  3. >>> datetime.timedelta(hours=1.232,seconds=20.3).microseconds
  4. 500000
>>> datetime.timedelta(hours=1.232,seconds=20).microseconds
200000
>>> datetime.timedelta(hours=1.232,seconds=20.3).microseconds
500000

支持的操作有:

1 = t2 + t3 两个timedelta对象相加,同时满足 t1-t2 == t3 and t1-t3 == t2 为True
t1 = t2 - t3 两个timedelta对象相减, 同时满足 t1 == t2 - t3 and t2 == t1 + t3 为True
t1 = t2 * i or t1 = i * t2 timedelta对象分别乘以i 同时满足 t1 // i == t2 为True, 且 i != 0
t1 = t2 // i 向下取整,余数部分被丢弃
+t1 返回和t1相同值的timedelta对象
-t1 取反操作,等价于timedelta(-t1.days, -t1.seconds, -t1.microseconds)和 t1* -1
abs(t) 绝对值,等价于: +t 当 t.days >= 0,  -t 当 t.days < 0
str(t) 返回字符串,格式为: [D day[s], ][H]H:MM:SS[.UUUUUU]
repr(t) 返回字符串,格式为: datetime.timedelta(D[, S[, U]])
此外,timedelta和可以和date,datetime对象进行加减操作,如:
  1. >>> datetime.datetime.now()
  2. datetime.datetime(2013, 5, 23, 10, 49, 27, 182057)
  3. >>> datetime.datetime.now()+datetime.timedelta(2)
  4. datetime.datetime(2013, 5, 25, 10, 49, 29, 385559)
>>> datetime.datetime.now()
datetime.datetime(2013, 5, 23, 10, 49, 27, 182057)
>>> datetime.datetime.now()+datetime.timedelta(2)
datetime.datetime(2013, 5, 25, 10, 49, 29, 385559)
Python2.7新增了方法:
 
timedelta.total_seconds()
用于计算秒数。等价于:(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
 
实例1:
'''时间d距离now()的长度,比如:1分钟前,1小时前,1月前,1年前'''
 
  1. # -*- encoding=UTF-8 -*-
  2. import datetime
  3. def timebefore(d):
  4. chunks = (
  5. (60 * 60 * 24 * 365, u'年'),
  6. (60 * 60 * 24 * 30, u'月'),
  7. (60 * 60 * 24 * 7, u'周'),
  8. (60 * 60 * 24, u'天'),
  9. (60 * 60, u'小时'),
  10. (60, u'分钟'),
  11. )
  12. #如果不是datetime类型转换后与datetime比较
  13. if not isinstance(d, datetime.datetime):
  14. d = datetime.datetime(d.year,d.month,d.day)
  15. now = datetime.datetime.now()
  16. delta = now - d
  17. #忽略毫秒
  18. before = delta.days * 24 * 60 * 60 + delta.seconds  #python2.7直接调用 delta.total_seconds()
  19. #刚刚过去的1分钟
  20. if before <= 60:
  21. return u'刚刚'
  22. for seconds,unit in chunks:
  23. count = before // seconds
  24. if count != 0:
  25. break
  26. return unicode(count)+unit+u"前"
# -*- encoding=UTF-8 -*-
import datetime
def timebefore(d):
chunks = (
(60 * 60 * 24 * 365, u'年'),
(60 * 60 * 24 * 30, u'月'),
(60 * 60 * 24 * 7, u'周'),
(60 * 60 * 24, u'天'),
(60 * 60, u'小时'),
(60, u'分钟'),
)
#如果不是datetime类型转换后与datetime比较
if not isinstance(d, datetime.datetime):
d = datetime.datetime(d.year,d.month,d.day)
now = datetime.datetime.now()
delta = now - d
#忽略毫秒
before = delta.days * 24 * 60 * 60 + delta.seconds #python2.7直接调用 delta.total_seconds()
#刚刚过去的1分钟
if before <= 60:
return u'刚刚'
for seconds,unit in chunks:
count = before // seconds
if count != 0:
break
return unicode(count)+unit+u"前"

实例2:

‘’‘当前的时间上加一天或一年减一天等操作’‘’

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. from datetime import datetime,timedelta
  4. now = datetime.now()
  5. yestoday = now - timedelta(days=1)
  6. tommorow = now + timedelta(days=1)
  7. next_year = now + timedelta(days = 365)
#!/usr/bin/env python
# -*- coding:utf-8 -*- from datetime import datetime,timedelta now = datetime.now() yestoday = now - timedelta(days=1)
tommorow = now + timedelta(days=1) next_year = now + timedelta(days = 365)

参考:http://docs.python.org/2/library/datetime.html

Python timedelta的更多相关文章

  1. Python timedelta模块 时间增减用法

    timedalte 是datetime中的一个对象,该对象表示两个时间的差值 构造函数:datetime.timedelta(days=0, seconds=0, microseconds=0, mi ...

  2. Python Web框架篇:Django Form组件

    Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...

  3. 我使用celery以及docker部署遇到的问题

    首先我本机测试时没有问题的,但是在线上docker中,任务一直显示 "Sending due task".超时的任务是 django orm update 操作,本地不会出现这样的 ...

  4. 按字母顺序排序的 arcpy.mapping 类列表

    arcpy.mapping 类可使用地图文档 (.mxd) 或图层文件 (.lyr) 中的不同对象类型的各种方法和属性.此文档可专门用作快速参考.有关详细信息,请使用链接跳转至各帮助页面. arcpy ...

  5. Redis命令参考(Keys & String)

    r = redis.Redis(ip, port, index) 如此实例化一个redis对象,index取值0-15,一个redis对象有16个库. Keys 函数 功能 返回值 备注 keys(s ...

  6. Django ORM 知识概要

    相关命令 python3 manage.py makemigrations 根据模型生成相关迁移文件 python3 manage.py migrate 根据迁移文件,将表结构更新到数据库中,并在Dj ...

  7. 13.Django1.11.6文档

    第一步 入门 检查版本 python -m django --version 创建第一个项目 django-admin startproject mysite 运行 python manage.py ...

  8. Django学习笔记(6)——Form表单

    知识储备:HTML表单form学习 表单,在前端页面中属于最常见的一个东西了.基本上网站信息的提交都用到了表单,所以下面来学习Django中优雅的表单系统:Form 表单的主要作用是在网页上提供一个图 ...

  9. Django表单字段汇总

    Field.clean(value)[source] 虽然表单字段的Field类主要使用在Form类中,但也可以直接实例化它们来使用,以便更好地了解它们是如何工作的.每个Field的实例都有一个cle ...

随机推荐

  1. zip unzip tar 压缩解压

    yum install -y unzip zip    yum安装zip -r mydata.zip mydata    mydata目录压缩为mydata.zipunzip mydata.zip - ...

  2. linux 忘记登陆密码

    声明:如果不是远程登陆,机器在自己身边还有救. 第一步:重启机器,进入brug界面(grub是一个引导管理程序,可以引导linux.winxp等系统,在/boot/grub/中的menu.lst中进行 ...

  3. Putting Apache Kafka To Use: A Practical Guide to Building a Stream Data Platform-part 2

    转自: http://confluent.io/blog/stream-data-platform-2          http://www.infoq.com/cn/news/2015/03/ap ...

  4. MongoDB 性能优化

    Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...

  5. 使用Github上传本地代码

    最近在学习Python,但是每次写完代码后不知道该怎么跟家里的电脑进行同步.于是开始了学习github ,方法很简单 1:注册个git账号:https://github.com 2:本地安装git软件 ...

  6. webstorm拉取git代码

    在webstorm中VCS → git → clone → url就是你的git代码地址,parent Directory(你要放到的目录),Directiory Name(起一个项目名称)

  7. jqueryUI之datepicker日历插件的介绍和使用

    jQuery UI很强大,其中的日期选择插件Datepicker是一个配置灵活的插件.我们可以自定义其展示方式,包括日期格式.语言.限制选择日期范围.添加相关按钮以及其它导航等.

  8. jQuery全局冲突案例,解决$.noConflict()

    如图:犹豫$在js中可以作为一个变量去定义,所以在引入jQuery包之前定义了$对象,那么,在引入jQuery包之后就不能使用$对象了 解决:使用$.noConflict()她可以返回一个对象,这个对 ...

  9. MySQL索引失效的场景

    WHERE字句的查询条件里有不等于号(WHERE column!=-),MYSQL将无法使用索引 类似地,如果WHERE字句的查询条件里使用了函数(如:WHERE DAY(column)=-),MYS ...

  10. Session存储

    session其实分为服务器端Session和客户端Session. 当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个sessionid作为标识.用户每次提交页面,浏览器都会把这个ses ...