计算日期时间之间的午夜计数

时间:2014-05-22 16:44:29

标签: python

是否有用于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)

3 个答案:

答案 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())