Хранение времени в Python - Лучший формат? - PullRequest
0 голосов
/ 15 декабря 2009

При хранении времени в Python (в моем случае в ZODB, но относится к любой БД), какой формат (эпоха, дата и т. Д.) Вы используете и почему?

Ответы [ 3 ]

5 голосов
/ 15 декабря 2009

Если база данных имеет собственный формат даты и времени, я пытаюсь использовать это, даже если это связано с кодированием и декодированием. Даже если это не на 100% стандарт, такой как SQLITE, я все равно использовал бы адаптеры даты и времени, описанные в нижней части страницы справки SQLITE3 .

Во всех других случаях я бы использовал формат ISO 8601 , если только это не была объектная база данных Python, в которой хранится какая-то двоичная кодировка объекта.

Формат ISO 8601 является сортируемым, и это часто требуется в базах данных для индексации. Кроме того, это однозначно, так что вы знаете, что 2009-01-12 был в январе, а не в декабре. Люди, которые меняют положение месяца и дня, всегда ставят год последним, поэтому, ставя его первым, люди не могут автоматически принять неправильный формат.

Конечно, вы можете переформатировать любое отображение и ввод данных в своих приложениях, но данные в базах данных часто просматриваются другими инструментами, а не вашим приложением.

5 голосов
/ 15 декабря 2009

Модуль datetime имеет стандартные типы для современной обработки Python дат и времени, и я использую его, потому что мне нравятся стандарты (я также думаю, что он хорошо спроектирован); У меня обычно также есть информация о часовом поясе через pytz .

Большинство БД, конечно, имеют свой собственный стандартный способ хранения даты и времени, но современные адаптеры Python для / из БД обычно поддерживают datetime (еще одна веская причина использовать его ;-) со стороны Python - - например, это то, что я получаю с хранилищем Google App Engine, собственным встроенным SQLite в Python и т. д.

0 голосов
/ 17 декабря 2009

Секунды, так как эпоха является наиболее компактным и портативным форматом для хранения временных данных. Например, собственный формат DATETIME в MySQL занимает 8 байтов вместо 4 для TIMESTAMP (секунд с начала эпохи). Вы также избежите проблем с часовым поясом, если вам нужно получать время от клиентов в нескольких географических точках. Логические операции (для сортировки и т. Д.) Также выполняются быстрее всего на целых числах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...