Знайти найстаріший / наймолодший об’єкт дати та часу у списку


94

У мене є список об’єктів дати та часу, і я хочу знайти найстаріший чи наймолодший. Деякі з цих дат можуть бути в майбутньому.

from datetime import datetime

datetime_list = [
    datetime(2009, 10, 12, 10, 10),
    datetime(2010, 10, 12, 10, 10),
    datetime(2010, 10, 12, 10, 10),
    datetime(2011, 10, 12, 10, 10), #future
    datetime(2012, 10, 12, 10, 10), #future
]

Який найоптимальніший спосіб це зробити? Я думав порівняти datetime.now () з кожним із них.


6
Як щодо maxта min?
JoshD

9
Подібного запитання щодо stackoverflow не було, я шукав відповідь, тому я впевнений, що це буде корисно для інших.
panosl

Відповіді:


129

Найстаріші:

oldest = min(datetimes)

Наймолодші до цього:

now = datetime.datetime.now(pytz.utc)
youngest = max(dt for dt in datetimes if dt < now)

Ви маєте на увазі найстаріший? ( Oldest before now)
Булгантамір,

У Python 3 я вважаю, що це недоліки. Якщо я даю цей масив ["April2020", "March2020"], min дасть мені "April2020", як ніби min дасть найсвіжіший. Однак якщо я дам його ["квітень2020", "січень2021", "березень2020"], min дасть мені "квітень2020". Я майже впевнений, що min дасть алфавітний мінімум, що не обов'язково є останньою датою.
ScottyBlades

1
@ScottyBlades це тому, що у вашому прикладі ваші значення - це рядки (які, здається, представляють дату, але насправді не є dateзначеннями), тому їх дійсно можна порівняти лише за алфавітом. Якби у вас замість цього був масив dateабо datetimeзначення, їх було б правильно порівняти.
Йорданія

30

Дано список дат dates:

Максимальна дата - max(dates)

Мінімальна дата - min(dates)



6

ви спробували це:

>>> from datetime import datetime as DT
>>> l =[]
>>> l.append(DT(1988,12,12))
>>> l.append(DT(1979,12,12))
>>> l.append(DT(1979,12,11))
>>> l.append(DT(2011,12,11))
>>> l.append(DT(2022,12,11))
>>> min(l)
datetime.datetime(1979, 12, 11, 0, 0)
>>> max(l)
datetime.datetime(2022, 12, 11, 0, 0)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.