DateTime как ключ

Я пытаюсь использовать тип datetime в качестве ключа в базе данных b-tree BerkeleyDB. Мои цели:

  1. минимальные накладные расходы для хранения даты и времени
  2. сравнение ключей по дате (для получения диапазона)
  3. разумная скорость

Как представить дату и время в наиболее компактной форме и использовать алгоритм сравнения ключей bsddb по умолчанию?

Сложно ли это сделать на C и сделать маленькое расширение Python для таких задач? У меня нет опыта работы с C, и я могу понимать только небольшие фрагменты C (и копировать и вставлять их).


person ÚÒíÒ ÇáËÚÇáÈí    schedule 08.01.2012    source источник
comment
Вы можете сохранить эпоху Unix, это настолько просто, насколько это возможно, поскольку это просто число   -  person fge    schedule 09.01.2012


Ответы (1)


Какой диапазон значений даты и времени вас интересует? И какое разрешение по времени?

Как указано в комментарии fge, если вам нужно 1-секундное разрешение в течение периода, ограниченного 1902-2037, вы можете использовать 32-битное целое число со знаком и количество секунд, прошедших с эпохи Unix, то есть 1970-01-01 00:00:00 +00:00 (полночь 1 января 1970 года по всемирному координированному времени). Если вам нужен более широкий диапазон, вам, вероятно, следует использовать 64-битное целое число со знаком относительно эпохи Unix. Если вам нужна точность до доли секунды, сохраните 32-битное целое число со знаком, которое представляет собой количество наносекунд. Обратите внимание, что для отрицательного времени (до 1970 г.) доли секунды также должны быть отрицательными.

Одной из причин использования этих представлений является то, что значение можно легко найти через стандартные интерфейсы Unix (POSIX), такие как time() для разрешения в 1 секунду и clock_gettime() для разрешения в наносекундах или gettimeofday() для разрешения в микросекундах.

person Jonathan Leffler    schedule 09.01.2012