python之 datetime模块(时间计算方面比较有优势)
2018-07-24 本文已影响0人
陆_志东
datetime模块中包含以下类: 主要看下面关于datetime类的讲解和timedelta的讲解
date 日期对象,常用的属性有year,month,day
time 时间对象
datetime 时间日期对象,常用的属性有hour, minute, second, microsecond (主要)
timedelta 时间间隔,即两个时间点之间的长度 (主要)
date对象详解
date类代码示例:
a = datetime.date.today()
>>a
datetime.date(2018,7,23)
>>a.year
2018
>>a.month
7
>>a.day
23
日期大小比较
__eq__() 等于
__gt__() 大于
__ge__() 大于等于
__lt__() 小于
__le__()小于等于
__ne__() 不等于
代码示例
a = datetime.date(2018,7,22)
b = datetime.date(2018,7,23)
>>a.__eq__(b)
False
>>a.__gt__(b)
False
>>a.__lt__(b)
True
>>a.__ne__(b)
True
比较两个日期差多少天
x.__sub__(y) x-y
x.__rsub__(y) y-x
代码
a = datetime.date(2018,7,23)
b = datetime.date(2018,7,20)
>>a.__sub__(b).days # a.__sub__(b) 结果是一个timedelta 类型
3
timetuple 相当于time.localtime() 一个日期类型的元祖
>>a = datetime.date.today().timetuple()
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=204, tm_isdst=-1)
>>a.tm_year
2018
fromtimestamp() 根据给定的时间戳,生成一个date类型的时间,与datetime.datetime.today() 作用相同
>>a = time.time()
1532348431.53657
>>datetime.date.fromtimestamp(a)
datetime.date(2018, 7, 23)
strftime日期格式化输出
>>a = datetime.date.today()
>>a.strftime("%Y%m%d")
"20180723"
datetime类详解
datetime.datetime.now()
datetime类数据构成
datetime(year,month,day[,hour[,minute[,second[,microsecond[,tzinfo]]]]])
microsecond :毫秒
tzinfo:时区
返回当前时间日期对象
>>a= datetime.datetime.now()
datetime.datetime(2018, 7, 23, 20, 29, 42, 646150)
datetime.datetime.strptime(string,format)
将string时间,转为format指定的格式
>>datetime.datetime.strptime('2017-3-22 15:25','%Y-%m-%d %H:%M')
datetime.datetime(2017, 3, 22, 15, 25)
利用timedelta类型进行时间换算
from datetime import timedelta
a = timedelta(days=2,hours=6)
b = timedelta(hours=4.5)
c = a+b
print(c.days) # 2
print(c.seconds/3600) # 10.5
print(c.total_seconds()/3600) # 58.5
上面的seconds 是对时间的计算,忽略天数
total_seconds是连天数月一起计算的差值 58.5的结果由来,天数2天加10.5个小时 = 58.5个小时
还可以继续看下面的示例
t1 = datetime.datetime.strptime("2016-08-24 10:30:00", "%Y-%m-%d %H:%M:%S")
t2 = datetime.datetime.strptime("2016-08-27 12:30:00", "%Y-%m-%d %H:%M:%S")
interval_time = (t2 - t1).seconds # 输入的结果:7200
total_interval_time = (t2 - t1).total_seconds() # 输出结果也是: 266400, 3天加2个小时
如果需要特定的日期和时间 可以创建datetime实例并且使用标准的数学运算来操作他们.示例如下:
from datetime import datetime
a = datetime(2012,9,23)
print(a+timedelta(days=10)) # 2012-10-23 00:00:00
b = datetime(2012,12,21)
d = b -a
print(d.days) # 89
now = datetime.today()
print(now) # 2012-12-21 14:54:43.094063
print(now + timedelta(minutes = 10)) # 2012-12-21 15:04:43.094063
datetime 模块是支持处理闰年的,如果是闰年,datetime模块会在2月的时候生成29天