python - 将日期范围与时间分开
问题描述
随着时间的推移,我有一系列日期。例子:
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)
解决方案
创建一个包含列表元素的日期范围,用开始/结束日期时间替换第一个和最后一个元素,并将格式设置为字符串元组:
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')]
推荐阅读
- javascript - 如何解析为非默认 javascript 文件
- python-3.x - 如何在虚幻中将 Python 版本从 2.7 切换到 3.7
- android - 高级 RecyclerView 库 - 扩展示例
- java - JAR 文件构建不正确
- javascript - 仅使特定窗口处于活动状态,直到它在 js 中关闭
- angular - 使用 mergeMap 上传所有文件后启动 http 帖子
- python - 删除子列表重复项,包括反转
- ag-grid - 反应 ag-grid - 等待“网格调整大小”事件的“结束”,然后才执行操作
- vuejs2 - 关于 VueJs 中的 DOM 操作的困惑
- angular - *matCellDef、*matHeaderCellDef 和 *ngIf 在同一个容器中