首页 > 解决方案 > 如何在特定时间之间获取记录?

问题描述

假设我有一个从特定时间到特定时间(上午 8:20 到上午 12:20)的时间戳列表。如何仅获取时间从上午 8:20 到上午 9:20 的那些?

[2021-03-19 08:20:00.923000+00:00
2021-03-19 08:20:02.221000+00:00
2021-03-19 08:20:02.268000+00:00
2021-03-19 08:20:03.194000+00:00
2021-03-19 08:20:03.253000+00:00
2021-03-19 08:20:03.485000+00:00
2021-03-19 08:20:04.275000+00:00
2021-03-19 08:20:04.945000+00:00
2021-03-19 08:20:05.285000+00:00
2021-03-19 08:20:05.530000+00:00
2021-03-19 08:20:05.609000+00:00
2021-03-19 08:20:05.556000+00:00
2021-03-19 08:20:07.453000+00:00
2021-03-19 08:20:07.860000+00:00
2021-03-19 08:20:07.876000+00:00
2021-03-19 08:20:08.450000+00:00
2021-03-19 08:20:08.806000+00:00
2021-03-19 08:20:09.680000+00:00
2021-03-19 08:20:09.699000+00:00
2021-03-19 08:20:11.081000+00:00
.
.
. ] 

我尝试使用:

lastHourDateTime = datetime.datetime.now() - datetime.timedelta(hours = 1)
print lastHourDateTime.strftime('%Y-%m-%d %H')

然而,这不是我所期待的。由于lastHourDatetimehas datetime.now,所以我必须手动不断更改代码。如何获取上午 8:20 到上午 9:20 的时间戳记录?

标签: pythondatedatetime

解决方案


这个怎么样?

from dateutil import parser

timestamps = [
    "2021-03-19 07:20:00.923000+00:00",
    "2021-03-19 08:20:00.923000+00:00",
    "2021-03-19 08:20:02.221000+00:00",
    "2021-03-19 08:20:03.485000+00:00",
    "2021-03-19 08:20:04.275000+00:00",
    "2021-03-19 08:20:05.285000+00:00",
    "2021-03-19 08:20:07.876000+00:00",
    "2021-03-19 08:20:08.450000+00:00",
    "2021-03-19 08:20:08.806000+00:00",
    "2021-03-19 09:20:09.680000+00:00",
    "2021-03-19 09:20:09.699000+00:00",
    "2021-03-19 09:20:11.081000+00:00",
    "2021-03-19 10:20:11.081000+00:00",
]

print("\n".join(t for t in timestamps if parser.parse(t).time().strftime("%H:%M") in ["08:20", "09:20"]))

输出:

2021-03-19 08:20:00.923000+00:00
2021-03-19 08:20:02.221000+00:00
2021-03-19 08:20:03.485000+00:00
2021-03-19 08:20:04.275000+00:00
2021-03-19 08:20:05.285000+00:00
2021-03-19 08:20:07.876000+00:00
2021-03-19 08:20:08.450000+00:00
2021-03-19 08:20:08.806000+00:00
2021-03-19 09:20:09.680000+00:00
2021-03-19 09:20:09.699000+00:00
2021-03-19 09:20:11.081000+00:00

编辑:

正如评论中指出的那样,如果您想在两者之间的任何时间匹配,请08:20 and 09:20尝试以下操作:

from dateutil import parser

timestamps = [
    "2021-03-19 07:20:00.923000+00:00",
    "2021-03-19 08:20:00.923000+00:00",
    "2021-03-19 08:20:02.221000+00:00",
    "2021-03-19 08:20:03.485000+00:00",
    "2021-03-19 08:20:04.275000+00:00",
    "2021-03-19 08:20:05.285000+00:00",
    "2021-03-19 08:20:07.876000+00:00",
    "2021-03-19 08:21:08.450000+00:00",
    "2021-03-19 08:30:08.806000+00:00",
    "2021-03-19 08:56:08.806000+00:00",
    "2021-03-19 09:09:09.680000+00:00",
    "2021-03-19 09:20:09.680000+00:00",
    "2021-03-19 09:26:09.699000+00:00",
    "2021-03-19 09:58:11.081000+00:00",
    "2021-03-19 10:20:11.081000+00:00",
]

print("\n".join(t for t in timestamps if "08:20" <= parser.parse(t).time().strftime("%H:%M") <= "09:20"))

for loop或者如果你想拥有一个好老人:

for time_ in timestamps:
    t = parser.parse(time_).time().strftime("%H:%M")
    if "08:20" <= t <= "09:20":
        print(time_)

输出:

2021-03-19 08:20:00.923000+00:00
2021-03-19 08:20:02.221000+00:00
2021-03-19 08:20:03.485000+00:00
2021-03-19 08:20:04.275000+00:00
2021-03-19 08:20:05.285000+00:00
2021-03-19 08:20:07.876000+00:00
2021-03-19 08:21:08.450000+00:00
2021-03-19 08:30:08.806000+00:00
2021-03-19 08:56:08.806000+00:00
2021-03-19 09:09:09.680000+00:00
2021-03-19 09:20:09.680000+00:00
2021-03-19 08:20:00.923000+00:00
2021-03-19 08:20:02.221000+00:00
2021-03-19 08:20:03.485000+00:00
2021-03-19 08:20:04.275000+00:00
2021-03-19 08:20:05.285000+00:00
2021-03-19 08:20:07.876000+00:00
2021-03-19 08:21:08.450000+00:00
2021-03-19 08:30:08.806000+00:00
2021-03-19 08:56:08.806000+00:00
2021-03-19 09:09:09.680000+00:00
2021-03-19 09:20:09.680000+00:00

推荐阅读