Каков наилучший способ хранения прошедшего времени в базе данных - PullRequest
2 голосов
/ 04 июня 2011

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

Final Time: 109.39  (1 minute, 9 seconds and 39/100th seconds)

Quarter Time: 2260  (21 seconds and 60/100th seconds)

Half Time: 4524     (45 seconds and 24/100th seconds)

Three Quarters: 5993   (59 seconds and 93/100th seconds) 

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

Times in fifths: :223  :451  :564      1:091 (note the last digits are superscripts)

Times in hundredths: 22.60  :45.24  :56.93   1:09.39

Заранее спасибо за ваш вклад.

Ответы [ 4 ]

4 голосов
/ 04 июня 2011

Обычно интервалы времени сохраняются как (1) прошедшие секунды или (2) дата начала / окончания.Прошедшие секунды могут быть целыми числами или числами с плавающей запятой, если вам это требуется.Вы можете быть креативными / сумасшедшими и хранить все время в миллисекундах, в этом случае вам нужно только целое число.

2 голосов
/ 04 июня 2011

Если вы используете PostgreSQL, вы можете использовать interval тип данных.В противном случае, любое целое число (int4, int8) или число, которое поддерживает ваша база данных, в порядке.Конечно, сохраняйте значения в одной единице измерения: секунды, минуты, миллисекунды.

1 голос
/ 04 июня 2011

Я думаю, 109.39, представляющее 1 min 9.39 sec, довольно глупо. Однозначная, конечно, историческая традиция, может быть, но жалко делать вычисления с этим форматом. (Не невозможно, но исправить это во время импорта звучит легко.)

Я бы сохранял время в некотором десятичном формате некоторого вида - либо целое число, представляющее сотые доли секунды, как отображаются все ваши другие времена, либо формат, зависящий от базы данных, в десятичном формате. *

Стандартные представления с плавающей запятой могут в конечном итоге заставить вас задуматься, почему лошади, пробежавшей два круга по 20,1 секунды каждый, потребовалось 40,200035 секунд, чтобы пройти оба круга вместе.

1 голос
/ 04 июня 2011

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

...