获取Python中日期-时间范围之间的小时数

获取Python中日期-时间范围之间的小时数,python,datetime,Python,Datetime,因此,我尝试在python中以开始日期和结束日期之间的间隔打印总小时数,如下所示: @app.route('/test/') def test(): date_format = "%Y-%m-%d %H:%M:%S" start_date_time = datetime.strptime("2018-10-16 07:00:00", date_format) end_date_time = datetime.strptime("2018-10-18 22:00:00", date_format

因此,我尝试在python中以开始日期和结束日期之间的间隔打印总小时数,如下所示:

@app.route('/test/')
def test():

date_format = "%Y-%m-%d %H:%M:%S"
start_date_time = datetime.strptime("2018-10-16 07:00:00", date_format)
end_date_time = datetime.strptime("2018-10-18 22:00:00", date_format)

def daterange(start_date_time, end_date_time):
    for n in range(int ((end_date_time - start_date_time).days)):
        yield start_date_time + timedelta(n)

for single_date in daterange(start_date_time, end_date_time):
    def get_delta(start_date_time, end_date_time):
        delta = end_date_time - start_date_time
        return delta

# Split time in hours
delta = get_delta(start_date_time,end_date_time)
for i in range(delta.days * 24 + 1): # THIS IS ONLY CALCULATING 24HRS FROM TIME GIVEN START TIME NOT TILL THE SELECTED END TIME SO I'M ONLY GETTING AN EXACT 24 HOUR RANGE
    currtime = start_date_time + timedelta(hours=i)

    print (currtime)
return ("done")

这样一来,我只能从所选日期开始计算前24小时,但我希望继续计算并计算到所选结束日期的所有时间。

您可能想得太多了

from datetime import datetime, timedelta

date_format = "%Y-%m-%d %H:%M:%S"
start_date_time = datetime.strptime("2018-10-16 07:00:00", date_format)
end_date_time = datetime.strptime("2018-10-18 22:00:00", date_format)

def get_delta(l, r):
    return abs(int((l-r).total_seconds())) / 3600

for h in range(int(get_delta(start_date_time, end_date_time))):
    print((start_date_time + timedelta(0, h*3600)).strftime(date_format))

你可能想得太多了

from datetime import datetime, timedelta

date_format = "%Y-%m-%d %H:%M:%S"
start_date_time = datetime.strptime("2018-10-16 07:00:00", date_format)
end_date_time = datetime.strptime("2018-10-18 22:00:00", date_format)

def get_delta(l, r):
    return abs(int((l-r).total_seconds())) / 3600

for h in range(int(get_delta(start_date_time, end_date_time))):
    print((start_date_time + timedelta(0, h*3600)).strftime(date_format))

您可以始终使用
.total_seconds()/3600
您可以始终使用
.total_seconds()/3600
,但这只是给出两个日期之间的总小时数,不会打印小时间隔。。。谢谢你的帮助啊。这是一件奇怪的事,但没关系。编辑。好的,这似乎很有效,谢谢你的回答。我将标记为正确,但如果您能提供帮助,我有一个问题,是否可以在此之后的日期内循环并每天执行一个函数,例如:16/10/2018>做点什么。。。继续。。。2018年10月17日>做点什么。。。。继续。。。2018年10月18日>做点什么。再次感谢是的-您可以在循环中使用类似于
new\u time=start\u date\u time+timedelta(0,h*3600)
的内容。然后
如果new\u time.hour==0:
将在每一天都运行代码。但这只会给出两个日期之间的总小时数,而不会打印小时间隔。。。谢谢你的帮助啊。这是一件奇怪的事,但没关系。编辑。好的,这似乎很有效,谢谢你的回答。我将标记为正确,但如果您能提供帮助,我有一个问题,是否可以在此之后的日期内循环并每天执行一个函数,例如:16/10/2018>做点什么。。。继续。。。2018年10月17日>做点什么。。。。继续。。。2018年10月18日>做点什么。再次感谢是的-您可以在循环中使用类似于
new\u time=start\u date\u time+timedelta(0,h*3600)
的内容。然后
如果new\u time.hour==0:
将在每次有新的一天时运行代码。