python技巧

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天

上一篇下一篇

猜你喜欢

热点阅读