Python 按小时和分钟对数据进行子集化,忽略日期

Python subsetting data by hour and minute, ignoring date

我有一个图像时间戳列表,格式为“20121002_1639”(“%Y%m%d_%H%M”)

我想创建一个函数,它接受这些时间戳的列表并排除在两者之间拍摄的图像 1500(下午 3:00)和 1700(下午 5:00)。但是,当我尝试只解析字符串的 %H%M 部分时,它会自动将这些日期时间分配给日期 19000101_1500 和 19000101_1700。所以我需要创建仅包含小时和分钟但与日期无关的对象。

伪代码应该是这样的:

import datetime as dt

# example datetime string

datestrings = ['20121002_1639', '20111101_1229', '20160424_1502', '20170328_1100']

Start_time = dt.datetime.strptime('1500', '%H%M')
End_time = dt.datetime.strptime('1700', '%H%M')

good_times = []

for time in datestrings:

    if dt.datetime.strptime(time[9:13], '%H%M') is between(Start_time, End_time):
         continue
    else: 
         good_times.append(time)

您只能使用 datetime 对象的时间部分,为此请使用 .time() 方法。所以你不需要只解析给定字符串的一部分,解析所有然后把它也 time part

datestrings = ['20121002_1639', '20111101_1229', '20160424_1502', '20170328_1100']

Start_time = dt.datetime.strptime('1500', '%H%M').time()
End_time = dt.datetime.strptime('1700', '%H%M').time()

good_times = []

for time in datestrings:
    if not (Start_time <= dt.datetime.strptime(time, '%Y%m%d_%H%M').time() < End_time):
        good_times.append(time)

print(good_times)  # ['20111101_1229', '20170328_1100']

事实上,您甚至可以通过基本的 int 比较来做到这一点

Start_time = 1500
End_time = 1700
for time in datestrings:
    if not (Start_time <= int(time.split("_")[-1]) < End_time):
        good_times.append(time)