首页 > 解决方案 > 将日期范围与时间分开

问题描述

随着时间的推移,我有一系列日期。例子:

diapason = ["2020-11-02 17:40", "2020-11-05 10:00"]

我想得到这样的分裂:

diapason = [(2020-11-02 17:40, 2020-11-03 00:00), (2020-11-03 00:00, 2020-11-04 00:00), (2020-11-04 00:00, 2020-11-05 00:00), (2020-11-05 00:00, 2020-11-05 10:00)]

我怎样才能做到这一点?到目前为止,我只设法除以 24 小时,如下所示:

from datetime import datetime,timedelta
diapason = ["2020-11-02 17:40", "2020-11-05 10:00"]

start = datetime.strptime(diapason[0], "%Y-%m-%d %H:%M")
end = datetime.strptime(diapason[1], "%Y-%m-%d %H:%M")
r = [(start + timedelta(days=i)).strftime("%Y-%m-%d %H:%M:%S.%f") for i in range(0, (end-start).days, 1)]

print(r)

标签: pythonalgorithmdatetime

解决方案


创建一个包含列表元素的日期范围,用开始/结束日期时间替换第一个和最后一个元素,并将格式设置为字符串元组:

from datetime import datetime, timedelta

diapason = ["2020-11-02 17:40", "2020-11-05 10:00"]
start, end = [datetime.fromisoformat(d) for d in diapason]

output = [[start.date()+timedelta(d), start.date()+timedelta(d+1)] for d in range((end-start).days + 2)]
output[0][0], output[-1][-1] = start, end

output = [(l[0].strftime('%Y-%m-%d %H:%M'), l[1].strftime('%Y-%m-%d %H:%M')) for l in output]

# output
# [('2020-11-02 17:40', '2020-11-03 00:00'),
#  ('2020-11-03 00:00', '2020-11-04 00:00'),
#  ('2020-11-04 00:00', '2020-11-05 00:00'),
#  ('2020-11-05 00:00', '2020-11-05 10:00')]

推荐阅读