Простые в использовании метки времени в Python

Я работаю над приложением типа журнала в Python. Приложение в основном позволяет пользователю записывать записи в журнал и добавляет отметку времени для последующего запроса журнала.

На данный момент я использую функцию time.ctime() для создания визуальных меток времени. Таким образом, записи в журнале выглядят так:

Thu Jan 21 19:59:47 2010 Did something
Thu Jan 21 20:01:07 2010 Did something else

Теперь я хотел бы иметь возможность использовать эти метки времени для поиска/запроса. Мне нужно иметь возможность искать, например, "2010", или "февраль 2010", или "23 февраля 2010".

Мои вопросы:

1) Какие временные модули следует использовать: time или datetime?

2) Каким будет подходящий способ создания и использования объектов временной метки?

Большое спасибо!


person Morlock    schedule 24.01.2010    source источник


Ответы (2)


Вариант 1: ничего не менять. Используйте time.strptime для анализа меток времени.

Вариант 2: изменить на datetime. Вы можете отформатировать временные метки таким же образом и использовать datetime.strptime разобрать их.

Это не имеет большого значения, так как код будет похожим. Поиск будет включать сопоставление месяцев, дней или лет или что-то в этом роде. Используйте для этого кортежи time. Или datetime.datetime объектов. Или поиск будет включать сравнение диапазонов времени; используйте для этого time в секундах. Или используйте datetime объектов. Они оба будут работать, и для этого они будут одинаковыми по сложности.

Расчет даты (90 дней в будущем, 3 месяца в прошлом и т. д.) — сильная сторона datetime.

В общем, datetime вам больше понравится, потому что он делает больше и не требует переключения между простым двойным временем и временем кортежа времени.

person S.Lott    schedule 24.01.2010
comment
Спасибо за отличный ответ. Я поставлю время на просмотр документации datetime. - person Morlock; 24.01.2010

Возможно, вы захотите перейти на ISO 8601. Поможет, например, с сортировкой или переносом данных между разными системами.

person Bandi-T    schedule 24.01.2010
comment
полностью согласен. намного читабельнее, а также вызывает меньше суеты при использовании различных инструментов. - person rytis; 24.01.2010
comment
Я буду использовать ISO 8601 в файле журнала, и спасибо журналу за предложение! Однако на самом деле вопрос заключается в том, какой модуль Python я должен использовать для работы с датами и временем. Если у вас есть способ реализовать ISO 8601 с помощью модуля Python из стандартной библиотеки, я был бы рад услышать об этом! Ваше здоровье - person Morlock; 24.01.2010
comment
Вот вопрос, делающий обратное, анализируя ISO 8601 в Python с использованием модуля datetime: stackoverflow.com/questions/969285/ - обратите внимание на комментарий при просмотре методы datetime.datetime вместо самого модуля datetime. Если вам повезет, вы найдете функцию strftime(), которая принимает такой же (или очень похожий) синтаксис формата. Я, кажется, припоминаю, что когда-то делал что-то подобное, и единственное, что мне нужно было сделать, это добавить дробные секунды (поскольку они были нужны моему приложению в то время). - person Bandi-T; 24.01.2010
comment
Не забывайте, однако, что встроенные в Python объекты даты/времени относительно наивны и всегда предполагают, что в минуте ровно 60 секунд (3600 * 24 секунды в день) - это игнорирует, например, високосные секунды. - person Bandi-T; 24.01.2010
comment
Вот представление даты и времени в Python от Йохена Восса: seehuhn.de/pages/pdate - person Bandi-T; 24.01.2010
comment
Спасибо за ссылку на Seehuhn Bandi-T - person Morlock; 24.01.2010