Что означает тип данных, чтобы сэкономить часы - PullRequest
5 голосов
/ 01 ноября 2010

Что такое хороший тип данных для сохранения часов в .net?

Лучше использовать тип decimal или тип данных double более подходящий. С часами я имею в виду такие значения, как:

  • 2 за два часа
  • 1,5 за 90 минут
  • 8,25 в течение 8 часов и 15 минут.

Ответы [ 4 ]

12 голосов
/ 01 ноября 2010

Хороший способ представить количество часов - использовать интервал времени:

TimeSpan hours = TimeSpan.FromHours(2);

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

Вы также можете хранить его как целое число, например, в секундах, миллисекундах или тиках.

6 голосов
/ 01 ноября 2010

Лучший тип данных для хранения часов предназначен для него - TimeSpan .

У него есть методы, которые позволяют вам добавлять / вычитать / конвертировать его.

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

Я бы использовал тип данных time - так как он будет содержать диапазон:

00: 00: 00.0000000 - 23: 59: 59.9999999

Однако, если вам нужно провести более 24 часов в этом поле, вы можете рассмотреть tinyint или int с указанием количества минут (при условии, что это максимальное временное разрешение, которое вам требуется). *

4 голосов
/ 01 ноября 2010

В SQL Server используйте INT или DECIMAL. ВРЕМЯ на самом деле не идеально подходит для хранения продолжительности, потому что ВРЕМЯ определяет момент времени в течение 24 часов, тогда как длительность - это просто целое или десятичное значение. Вы не можете делать сложение или вычитание со значениями ВРЕМЕНИ, и нет никакого очевидного способа использовать ВРЕМЯ для хранения длительностей, превышающих 24 часа.

1 голос
/ 01 ноября 2010

Почему бы не использовать ВРЕМЯ ?

Вы можете использовать DATEADD с TIME, чтобы упростить управление им:

SELECT DATEADD(minute, 30, CAST('2:00:00' AS TIME))

становится 02:30:00.0000000. И так далее ..

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