Tìm đối tượng datetime cũ nhất / trẻ nhất trong danh sách


93

Tôi có một danh sách các đối tượng datetime và tôi muốn tìm đối tượng cũ nhất hoặc trẻ nhất. Một số ngày này có thể là trong tương lai.

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
]

Cách tối ưu nhất để làm như vậy là gì? Tôi đã nghĩ đến việc so sánh datetime.now () với từng cái.


6
Làm thế nào về maxmin?
JoshD 13/10/10

9
Không có bất kỳ câu hỏi nào tương tự trên stackoverflow, tôi đã tìm kiếm câu trả lời, vì vậy tôi chắc chắn rằng nó sẽ hữu ích cho những người khác.
panosl 13/10/10

Câu trả lời:


129

Cũ nhất:

oldest = min(datetimes)

Trẻ nhất trước giờ:

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

Ý bạn là già nhất? ( Oldest before now)
Bulgantamir

Trong Python 3, tôi nghĩ rằng điều này là thiếu sót. Nếu tôi cung cấp mảng này ["April2020", "March2020"], min sẽ cho tôi "April2020" như thể min sẽ cho gần đây nhất. Tuy nhiên, nếu tôi cho nó ["April2020", "January2021", "March2020"], min sẽ cho tôi là "April2020". Tôi khá chắc chắn rằng min sẽ cho giá trị thấp nhất trong bảng chữ cái mà không nhất thiết phải là ngày gần đây nhất.
ScottyBlades

1
@ScottyBlades đó là bởi vì trong ví dụ của bạn, các giá trị của bạn là chuỗi (xảy ra để đại diện cho một ngày, nhưng không thực sự là dategiá trị), vì vậy chúng chỉ thực sự có thể được so sánh theo thứ tự bảng chữ cái. Thay vào đó, nếu bạn có một mảng datehoặc datetimegiá trị, chúng sẽ được so sánh chính xác.
Jordan

30

Đưa ra danh sách các ngày dates:

Ngày tối đa là max(dates)

Ngày tối thiểu là min(dates)


15

Ngày giờ có thể so sánh được; vì vậy bạn có thể sử dụng max(datetimes_list)min(datetimes_list)


6

bạn đã thử cái này chưa:

>>> 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)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.