Сортировать по дате и времени в python3 - PullRequest
0 голосов
/ 08 мая 2018

Требуется помощь в сортировке диктонары python3 по объекту datetime (как показано ниже, значение в словаре) с использованием временной отметки ниже.

datetime: "2018-05-08T14:06:54-04:00"

Буду признателен за любую помощь, потратил немного времени на это и знаю, что для создания объекта я могу сделать:

format = "%Y-%m-%dT%H:%M:%S"
# Make strptime obj from string minus the crap at the end
strpTime = datetime.datetime.strptime(ts[:-6], format)
# Create string of the pieces I want from obj
convertedTime = strpTime.strftime("%B %d %Y, %-I:%m %p")

Но я не уверен, как можно сравнить это с другими значениями, где он правильно и точно учитывает день и время.

Опять же, любые толчки в правильном направлении будут с благодарностью!

Спасибо заранее.

1 Ответ

0 голосов
/ 08 мая 2018

Экземпляры Datetime поддерживают обычные операторы упорядочения (< и т. Д.), Поэтому заказывать следует в домене datetime напрямую, а не со строками.

Используйте вызываемый для преобразования ваших строк в с учетом часового пояса экземпляры datetime:

from datetime import datetime

def key(s):
    fmt = "%Y-%m-%dT%H:%M:%S%z"
    s = ''.join(s.rsplit(':', 1))  # remove colon from offset
    return datetime.strptime(s, fmt)

Эта ключевая функция может использоваться для правильной сортировки значений:

>>> data = {'s1': "2018-05-08T14:06:54-04:00", 's2': "2018-05-08T14:05:54-04:00"}
>>> sorted(data.values(), key=key)
['2018-05-08T14:05:54-04:00', '2018-05-08T14:06:54-04:00']
>>> sorted(data.items(), key=lambda item: key(item[1]))
[('s2', '2018-05-08T14:05:54-04:00'), ('s1', '2018-05-08T14:06:54-04:00')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...