在日期列表中查找最接近的过去日期

我正在尝试在日期列表中找到与当前日期最接近的过去日期。我找到了几个在列表中搜索最接近日期的示例,但是所有这些示例都允许返回进一步的日期。

日期时间列表具有以下形式:

datelist =
[datetime.datetime(2019, 12, 31, 0, 0),
 datetime.datetime(2020, 1, 10, 0, 0),
 datetime.datetime(2020, 1, 20, 0, 0),
 datetime.datetime(2020, 1, 31, 0, 0),
 datetime.datetime(2020, 2, 10, 0, 0),
 datetime.datetime(2020, 2, 20, 0, 0)]

到目前为止,我一直在实现以下功能以查找最接近的日期;

def nearest_ind(items, pivot):
    '''
    Find the nearest value to the given value (the pivot) in a list.
    '''
    time_diff = np.abs([date - pivot for date in items])
    return time_diff.argmin(0)

但这会将最接近的日期返回到当前日期,是返回将来最接近的日期的一半时间。我也一直在考虑实现numpy searchsorted函数,但这似乎总是返回最接近的将来日期,而不管我是通过以下方式为side参数选择“ right”还是“ left”:

np.searchsorted(datelist, datetime.datetime.now(), side='right')
np.searchsorted(datelist, datetime.datetime.now(), side='left')

numpy searchsorted函数在任何一个实例中都返回(如果我今天要在2020年2月7日运行它)4(对应于datetime.datetime(2020,2,10,0,0))。有谁知道确保过去的最接近日期总是被返回的方法?

评论
  • dab
    dab 回复

    Using min with two keys would be one way:

    from datetime import datetime
    
    now = datetime.now()
    min(datelist, key=lambda x: (x>now, abs(x-now)) )
    

    输出:

    datetime.datetime(2020, 1, 31, 0, 0)