欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Python timedelta

shiping1 的头像
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的值为所有参数的微秒部分的总和(四舍五入)如:
Python代码  收藏代码
  1. >>> datetime.timedelta(hours=1.232,seconds=20).microseconds  
  2. 200000  
  3. >>> datetime.timedelta(hours=1.232,seconds=20.3).microseconds  
  4. 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 * t2timedelta对象分别乘以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对象进行加减操作,如:
Python代码  收藏代码
  1. >>> datetime.datetime.now()  
  2. datetime.datetime(2013523104927182057)  
  3. >>> datetime.datetime.now()+datetime.timedelta(2)  
  4. datetime.datetime(2013525104929385559)  
Python2.7新增了方法:
 
timedelta.total_seconds()
用于计算秒数。等价于:(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
 
实例1:
'''时间d距离now()的长度,比如:1分钟前,1小时前,1月前,1年前'''
 
Python代码  收藏代码
  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"前"  

 实例2:

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

 

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

 

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

 
来自 http://liuzhijun.iteye.com/blog/1874020


python的timedelta

分类: Python 962人阅读 评论(0) 收藏 举报

两个日期之差:

>>> tt=datetime.datetime.strptime("2013-10-11",'%Y-%m-%d')
>>> print tt
2013-10-11 00:00:00
>>> tt1=datetime.datetime.strptime("2013-10-13",'%Y-%m-%d')
>>> print tt1
2013-10-13 00:00:00
>>> print tt1-tt
2 days, 0:00:00
>>> print (tt1-tt).days
2

 

 

 

 

当有人问你昨天是几号,是很容易就得到答案的,但当要计算出100天前是几号,就不那么容易得出了。而Pythondatetimetimedelta则可以轻松完成计算

例如:

import datetime

(datetime.datetime.now() -datetime.timedelta(days = 100)).strftime("%Y-%m-%d")

附:

datetime模块定义了下面这几个类:

 

datetime.date:表示日期的类,

常用的属性有year, month, day

 

datetime.time:表示时间的类,

常用的属性有hour, minute, second, microsecond

 

datetime.datetime:表示日期时间,

datetime.timedelta:表示时间间隔,即两个时间点之间的长度

datetime.tzinfo:与时区有关的相关信息

 

 

 

获取当前时间,并通过字符串输出。

格式为:%Y-%m-%d %H:%M:%S'

datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S' )

 

获取当前时间,但只保留日期

datetime.datetime.now().date()

 

将字符串转换为datetime类型

输入字符串的格式为:'%Y-%m-%d'

datetime.datetime.strptime(time,'%Y-%m-%d')

 

附录:

格式化符号汇总

%a 星期几的简写 Weekday name,abbr.

%A 星期几的全称 Weekday name,full

%b 月分的简写 Month name,abbr.

%B 月份的全称 Month name,full

%c 标准的日期的时间串 Completedate and time representation

%d 十进制表示的每月的第几天 Day ofthe month

%H 24小时制的小时 Hour (24-hourclock)

%I 12小时制的小时 Hour (12-hourclock)

%j 十进制表示的每年的第几天 Day ofthe year

%m 十进制表示的月份 Month number

%M 十时制表示的分钟数 Minutenumber

%S 十进制的秒数 Second number

%U 第年的第几周,把星期日做为第一天(值从053Week number(Sunday first weekday)

%w 十进制表示的星期几(值从06,星期天为0weekdaynumber

%W 每年的第几周,把星期一做为第一天(值从053 Week number(Monday first weekday)

%x 标准的日期串 Complete daterepresentation (e.g. 13/01/08)

%X 标准的时间串 Complete timerepresentation (e.g. 17:02:10)

%y 不带世纪的十进制年份(值从099Year numberwithin century

%Y 带世纪部分的十制年份 Yearnumber

%z%Z时区名称,如果不能得到时区名称则返回空字符。Name of time zone

%% 百分号

 

#! /usr/bin/python
# coding=utf-8
 
from datetime import datetime,timedelta
 
"""
timedelta代表两个datetime之间的时间差
"""
now = datetime.now()
past = past = datetime(2010,11,12,13,14,15,16)
 
timespan = now - past
#这会得到一个负数
past - now
attrs = [
("days",""),( 'seconds',""),( 'microseconds',"毫秒")
#('min',"最小"),( 'max',"最大"),
]
for k,v in attrs:
    "timespan.%s = %s #%s" % (k,getattr(timespan, k),v)
 
"""
总共相差的秒数
"""
timespan.total_seconds()
 
"""
实例化一个timespan
请注意它的参数顺序
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
"""
timespan = timedelta(days=1)
now - timespan #返回的是datetime
now + timespan
 
timespan * 2 #还可以乘哦。代表二倍
timespan / 13
 
#增加一个月
from calendar import monthrange
now + timedelta(days=monthrange(start.year,start.month)[1])

来自 http://blog.csdn.net/longshenlmj/article/details/8901004
 
普通分类: