将两个日期时间的范围转换为日期列表和每个日期python的秒数

时间:2017-11-05 13:08:05

标签: python datetime

我有兴趣创建一个函数,它将两个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的秒数)。

任何帮助都会很棒!

1 个答案:

答案 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是当天或早于开始日期等),我不确定你想要什么,但指定数据的输出是正确的。根据您的使用情况,注意夏季夏令时区域附近的问题 - 您需要'时区感知'日期时间对象。