Как должны быть представлены объекты даты в Apache Thrift

В Thrift IDL нет типа Date. Какой лучший межъязыковой механизм для представления объекта даты. Я думаю, что есть 2 идеальных кандидата, но я хотел бы услышать и другие идеи.

  1. Строка — на каждом языке вы можете использовать что-то вроде strftime для обратного преобразования даты.
  2. i32 - Время от эпохи может быть конвертировано обратно.

Я уверен, что есть и другие вещи, о которых стоит подумать, кроме конверсии. Надеюсь, у людей есть хорошие отзывы.


person Bryan M    schedule 10.01.2013    source источник
comment
Используйте i64 для представления объектов данных.   -  person faylon    schedule 11.01.2013


Ответы (2)


tldr; используйте соответствующую закодированную строку, если нет причин поступать иначе.

Это зависит от того, что требуется. Вот некоторые различия: имейте в виду, что современные компьютеры работают быстро, а преобразование, скорее всего, составляет лишь небольшую часть общего времени приложения, поэтому «больше обработки», как правило, даже не поддается измерению!

Строка (с ISO 8601 или более строгим XML dateTime):

  • "больше места" / "больше обработки" (см. выше) / фиксированный размер или переменный размер
  • стандартизированный культурно-нейтральный формат
  • удобочитаемый и легко идентифицируемый
  • поддерживает часовые пояса
  • больший диапазон (от -9999 до 9999)
  • более/произвольная точность (до 1 мкс)
  • в лексикографическом порядке (в том же часовом поясе и в совместимом формате)

Эпоха (вариант UNIX):

  • «меньше места» / «меньше обработки» / фиксированный размер
  • стандартизированный культурно-нейтральный формат
  • не удобочитаемый для человека (старательный программист должен уметь определять "примерно сейчас")
  • нет часовых поясов (даже не могу отличить "местный" от UTC)
  • Диапазон меньше (от 1970 до 2034 с 32-битным числом со знаком)
  • меньше/фиксированная точность (1 секунда)
  • порядковый номер

(Юлианский день — это еще одна кодировка, во многом похожая на время эпохи.)

Вывод:

Если объем/производительность является доказанной проблемой — для этого требуется анализ производительности и функциональные требования — я бы выбрал первое. Современные компьютеры намного быстрее, чем компьютеры всего несколько лет назад, и намного, намного быстрее, чем компьютеры десятилетней давности.

person Community    schedule 11.01.2013
comment
как этот ответ. Удобочитаемое представление даты и времени экономит много времени на отладку. - person misaxi; 15.07.2013
comment
Это, вероятно, никогда не будет прочитано, но отсутствие часовых поясов является одним из преимуществ метки времени UNIX. Все времена всегда представлены в формате UTC. Просто, легко, эффективно, без двусмысленности. - person Colin M; 18.08.2013

Просто для потомков вас может заинтересовать temporenc (http://temporenc.org), всеобъемлющий двоичный формат кодирования дат. и раз.

person wouter bolsterlee    schedule 06.11.2014