web-dev-qa-db-fra.com

Trouver la date la plus proche d'une date donnée

J'ai un tableau d'objets datetime et j'aimerais trouver quel élément du tableau est le plus proche d'une date donnée (par exemple datetime.datetime(2014,12,16))

This post montre comment trouver la date la plus proche qui n'est pas avant la date donnée. Comment puis-je modifier ce code afin qu'il puisse renvoyer les dates antérieures à une date donnée?

Par exemple, si le tableau contient les éléments datetime.datetime(2014,12,10) et datetime.datetime(2014,12,28), l'ancien élément doit être renvoyé car il est le plus proche de datetime.datetime(2014,12,16) en valeur absolue.

27
user3600497

Cette fonction retournera la datetime dans items qui est la plus proche de la date pivot.

def nearest(items, pivot):
    return min(items, key=lambda x: abs(x - pivot))

La bonne partie de cette fonction fonctionne sur des types autres que datetime trop prêts à l'emploi, si le type prend en charge la comparaison, la soustraction et abs, par exemple: les nombres et les types de vecteurs.

57
Tamas Hegedus
def nearestDate(base, dates):
    nearness = { abs(base.timestamp() - date.timestamp()) : date for date in dates }
    return nearness[min(nearness.keys())]
1
3442

Ma solution pour trouver l'index le plus proche au lieu de la valeur

def nearest_ind(items, pivot):
    time_diff = np.abs([date - pivot for date in items])
    return time_diff.argmin(0)
1
Lorenzo Meneghetti

Pour trouver la date la plus proche et retourner le timedelta (différence entre deux dates), j’ai fait ce qui suit:

def nearest_date(items,pivot):
    nearest=min(items, key=lambda x: abs(x - pivot))
    timedelta = abs(nearest - pivot)
    return nearest, timedelta

Cela peut être utile lorsque vous avez un seuil minimal de proximité pour votre application, comme je l'ai fait.

0
Mark Matthews