是否有用于python的本机工具或第三方库,可以计算两个日期时间之间的时间出现次数(特别是中间数)?
仅计算天数是不够的,因为日期时间可能没有相同的时间组件,因此您最终会得到此示例中显示的间隔类型:
from datetime import datetime as dt
dt1 = dt(2014,05,21,23)
dt2 = dt(2014,05,22,01)
i1 = dt2-dt1
print(i1) # 1 midnight but 2 hours
dt3 = dt(2014,05,21,01)
dt4 = dt(2014,05,22,23)
i2 = dt4-dt3 # 1 midnight but 1 day + 22 hours
print(i2)
答案 0 :(得分:4)
将两个日期时间的时间分量设置为同一时间,然后进行差异。
def midnights(dt1, dt2):
dt1 = dt1.replace(hour=0, minute=0, second=0, microsecond=0)
dt2 = dt2.replace(hour=0, minute=0, second=0, microsecond=0)
return (dt2 - dt1).days
答案 1 :(得分:3)
使用.date()
表示差异:
from datetime import datetime as dt
def count_midnights(dt1, dt2):
return (dt2.date() - dt1.date()).days
这样你得到:
>>> dt1 = dt(2014,05,21,23)
>>> dt2 = dt(2014,05,22,01)
>>> print count_midnights(dt1, dt2)
1
>>> dt3 = dt(2014,05,21,01)
>>> dt4 = dt(2014,05,22,23)
>>> print count_midnights(dt3, dt4)
1
答案 2 :(得分:0)
只是有点疯狂的选择,主要是FYI, - 你可以使用一个不错的Delorean
第三方:
from datetime import datetime as dt
import delorean
from delorean import stops
dt1 = dt(2014,05,21,23)
dt2 = dt(2014,05,22,01)
print sum(1 for stop in stops(start=dt1, stop=dt2, freq=delorean.HOURLY)
if stop.datetime == stop.midnight())