2013-10-11 4 views
2

Я создаю пользовательский тип данных, которые необходимо хранить набор точных временных меток (с точностью до миллисекунды) таким образом, что является эффективным и правильным. Я не особенно знаком с хитросплетениями обработки временных меток, поэтому подумал, что я попрошу здесь несколько советов.Время обработки с отметкой времени и смещение

Я вижу много вариантов:

  • магазин Joda Instant для каждой временной метки.
  • Магазин Joda DateTime для каждой отметки времени.
  • магазин один Joda DateTime объект один раз для типа данных, и имеют long смещение для всех других временных отметок по отношению к основному DateTime
  • Экспресс каждой временной метки в качестве long смещения к неподвижной точке (например, в Unix эпохи 1970-01-01T00: 00: 00Z)
  • ..... другие комбинации .....

Вопросы:

  • Что я s лучший способ сохранить последовательность временных меток?
  • Каковы основные компромиссы?
  • Любые подводные камни, на которые нужно обратить внимание?
+0

Является ли ваш пользовательский класс определяющим интервал? Если это так, вы можете захотеть просто использовать Joda Time [Interval class] (http://www.joda.org/joda-time/key_interval.html) –

ответ

3

Каждый из ваших вариантов хранения имеет смысл, и приятно видеть все ваши варианты с реальными моментами и никогда локальными датами (например, без часовых поясов).

Вашего пользовательский класс действительно будет определен его интерфейсом, так что если вы решили магазина лонгов (смещения эпох), вы всегда можете обеспечить методы интерфейса, чтобы получить значения из последовательности (и я полагаю, другие вещи, как «дельты «- или интервалы, длительности или периоды в Joda-talk) в человекочитаемых датах и ​​периодах, если хотите.

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

  • Сохранение последовательности длинных позиций является наиболее пространственно-эффективным.
  • Длинны не так уж плохи, как вы могли бы подумать, так как если ваши методы интерфейса хотят возвращать datetimes, вы просто передаете длинный конструктор DateTime.
  • Экстенты представляют собой тонкие обертки над длинными и обеспечивают удобные методы, если вам нужно добавить к ним длительность или вычислить длительность с моментов; ваш код может выглядеть немного лучше, чем если бы вы делали свою собственную математику по длинным, а затем строили DateTime или Period or Duration вокруг них.
  • DateTimes отлично, если у вас нет избыточных требований к хранению и фактической даты и времени суток для клиентов вашего пользовательского типа данных. Будут ли ваши пользователи заботиться о том, чтобы отметка времени была 10 октября в 16:22 в часовом поясе Америки/Лос-Анджелеса? Или длительность между метками времени имеет значение?
  • Хранение даты или времени плюс массив смещений выглядит грязной реализацией, поскольку в игре есть две концепции. Я бы подумал, что сохранение единственной последовательности моментов времени и времени, а не смешивания в длительности, имеет гораздо больший смысл.Если вам нужно работать с длительностью, просто вычислите их в своих методах интерфейса.

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

С точки зрения компромиссов, я действительно вижу, что longs, будучи примитивным, экономит место, и я бы предположил минимальное количество времени, так как DateTimes - это объекты, и есть все, что имеет место при распределении и освобождении кучи. Но опять же, если вы не сильно ограничены в памяти, я бы сказал, что лучше всего хранить DateTimes. Joda-Time может управлять всем часовым поясом для вас. Процедуры синтаксического анализа и форматирования просты и потокобезопасны. Существует множество удобных методов. И вам не придется делать какое-либо преобразование из ваших дней в долгой жизни. Хранение долгого времени только кажется мне преждевременной оптимизацией. Как ни странно, FWIW, я бы, вероятно, сделал это на Python, поскольку объекты datetime от Python по умолчанию наивны, а не по часовой стрелке! Jada-Time делает IMHO очень приятным и легким для понимания различием между Instants и Local DateTimes, поэтому придерживаться DateTimes во всем мире будет, я считаю, вашим лучшим выбором.

+0

спасибо за отличный ответ - это подтвердило некоторые из моих подозрений и научил меня некоторым новым вещам. – mikera

Смежные вопросы