我有兴趣创建一个函数,它将两个datetime
个对象(开始日期和结束日期)作为输入,并返回一个元组列表。我希望开始日期和结束日期之间的每个日期都有一个元组,以及此日期的秒数。例如:
import datetime
#there are total 86400 seconds within a date
start_date=datetime.datetime(2017, 10, 17,22,30,0) # this has 60*60+60*30= 5400 within that date
end_date=datetime.datetime(2017, 10, 19,10,30,11) # this date has 10*60*60+60*30+11=37811 seconds
desired_list_of_tupple=[(datetime.datetime(2017, 10, 17),5400),(datetime.datetime(2017, 10, 18),86400),(datetime.datetime(2017, 10, 19),37811)]
2017-10-17秒数是5400(22:30到午夜之间的秒数。
2017-10-18秒数是86400(整天都在范围内)。
2017-10-19秒数是37811(从午夜到10:30:11的秒数)。
任何帮助都会很棒!
答案 0 :(得分:1)
尝试以下方法:
from datetime import timedelta
def date_range(start, end):
current = start
while True:
next_stop = (current + timedelta(days=1)).replace(
hour=0, minute=0, second=0)
if next_stop > end:
next_stop = end
yield current.date(), (next_stop - current).total_seconds()
if next_stop == end:
break
current = next_stop
这是一个生成器函数,因此您需要list(date_range(start_date, end_date))
来获取列表。
我没有正确测试边缘情况(比如end_date是当天或早于开始日期等),我不确定你想要什么,但指定数据的输出是正确的。根据您的使用情况,注意夏季夏令时区域附近的问题 - 您需要'时区感知'日期时间对象。