如何从时间数组中查找与当前时间最接近的20分钟间隔
问题与解决方案
问题描述
我有如下格式的日期时间数组:
[["2023-Aug-08", "00:00", "302.218616", "-21.391909"], ["2023-Aug-08", "00:20", "306.564766", "-24.382470"], ["2023-Aug-08", "00:40", "311.149963", "-27.204929"] ... ]
每个数组元素的时间间隔为20分钟,覆盖全天24小时。我希望从中查找与当前时间最接近的时间间隔:例如当前时间为2:34时,获取对应2:40的元素索引;当前时间为2:29时,获取对应2:20的元素索引。我正在使用time库获取小时和分钟的字符串形式,但不清楚如何将其与数组中的时间进行比较。
解决方案
核心是把时间转换为从0点开始的总分钟数,通过数值运算快速定位目标时间对应的索引,无需直接比较字符串。
方法一:计算总分钟数匹配(通用版)
适用于数组时间顺序不确定的情况:
- 转换当前时间为总分钟数
import time # 获取当前时间的小时和分钟,转为总分钟数 current_time = time.localtime() current_total_min = current_time.tm_hour * 60 + current_time.tm_min
- 预处理数组时间
把数组中每个时间字符串转成总分钟数,同时记录对应索引:
data = [ ["2023-Aug-08", "00:00", "302.218616", "-21.391909"], ["2023-Aug-08", "00:20", "306.564766", "-24.382470"], ["2023-Aug-08", "00:40", "311.149963", "-27.204929"], # 其他元素... ] time_with_index = [] for idx, item in enumerate(data): hour, minute = map(int, item[1].split(':')) time_with_index.append( (hour * 60 + minute, idx) )
- 定位目标时间
根据当前总分钟数,计算最接近的20分钟整倍数,再匹配对应索引:
interval = 20 remainder = current_total_min % interval # 按需求判断向上/向下取整:余数>10则向上,否则向下 if remainder > interval // 2: target_min = current_total_min + (interval - remainder) else: target_min = current_total_min - remainder # 找到对应索引 for total_min, idx in time_with_index: if total_min == target_min: target_index = idx break print(f"目标元素索引:{target_index}")
方法二:直接计算索引(高效版)
如果数组严格按00:00、00:20、00:40...顺序排列,可以直接通过数学运算得到索引,无需遍历数组:
import time current_time = time.localtime() current_total_min = current_time.tm_hour * 60 + current_time.tm_min interval = 20 remainder = current_total_min % interval if remainder > interval // 2: target_index = (current_total_min + (interval - remainder)) // interval else: target_index = (current_total_min - remainder) // interval # 处理跨天边界(比如23:50取00:00的情况,按需调整) target_index = target_index % 72 # 全天共72个20分钟间隔 print(f"目标元素索引:{target_index}")
内容的提问来源于stack exchange,提问作者warherolion
相关产品推荐
相关产品推荐

