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. 第八篇:Spark SQL Catalyst源码分析之UDF

    /** Spark SQL源码分析系列文章*/ 在SQL的世界里,除了官方提供的常用的处理函数之外,一般都会提供可扩展的对外自定义函数接口,这已经成为一种事实的标准. 在前面Spark SQL源码分析 ...

  2. python ConfigParse模块(转)

    最近写程序要用到配置文件,那么配置文件的解析就很重要了,下文转自chinaunix 一.ConfigParser简介 ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ...

  3. 01_HBase概述

    1. HBase在Hadoop生态圈中的位置 问题:HBase 是什么,用在哪里,解决什么样的问题? 解答: 1)简单来说, HBase 是一种类似于面向列的分布式数据库(集群), 底层利用HDFS ...

  4. SQL Server----解决SQL Server 配置管理器不见了

    错误重现: 之前安装好的SQL Server 2012打开都没有问题,好多天没有打开了,今天打开我的SQL Server 2012 连接时出现错误: 在与SQL Server 建立连接时出现与网络相关 ...

  5. Object.assign() 从一个或多个源对象复制到目标对象

    Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 1.语法: Object.assign(target, ... , sources) 参 ...

  6. w3c标准盒模型与IE传统模型的区别

    一.盒子模型(box model) 在HTML文档中的每个元素被描绘为矩形盒子.确定其大小,属性——比如颜色.背景.边框,及其位置是渲染引擎的目标. CSS下这些矩形盒子由标准盒模型描述.这个模型描述 ...

  7. 搭建etcd集群

    一 介绍 etcd 高可用一致性键值存储系统,使用Raft一直算法处理日志复制以保证数据一致性.主要在搭建kubernates时关注到etcd来研究部署etcd.使用golang语言编写,和zooke ...

  8. Postman的安装

    打开chrome->设置->扩展程序->获取更多扩张程序:输入 postman就可以安装了    可能需要蓝灯FQ 安装好了直接打开即可使用

  9. ionic+cordova 学习开发App(一)

    一.项目所需环境 (一)jdk 1.jdk的安装,必须同时包含Java 和javac [一般安装包中都包含有,可以确定下] (二)node.js 和NPM 1.大多插件和辅助工具都运行在NPm平台上. ...

  10. Git 常用命令和 Git Flow 梳理

    git 用 git 有一段时间了,之前没有详细地了解 git flow,导致协作过程中或多或少出现了一些头疼问题.最近静下心来理了下 git flow 的整个流程,再回头看开朗了不少,总结到这里.介绍 ...