Тип для хранения времени в C # и соответствующий тип в T-SQL - PullRequest
10 голосов
/ 08 июня 2011

Я хотел бы знать, как хранить время в C # и T-SQL . Я знаю, что оба они предоставляют тип DateTime , но мне просто нужно хранить время . Например:

var startTime = 9PM;
var endTime = 10PM;

А затем сохранить / извлечь эти значения из базы данных. Заранее спасибо.

Франческо

Ответы [ 4 ]

10 голосов
/ 08 июня 2011

C #

Использовать ли DateTime или TimeSpan тип в C # для хранения 9 PM - по вкусу. Лично я бы использовал DateTime, оставив компонент даты пустым, так как это семантически ближе к тому, что вы хотите. (A TimeSpan предназначен для хранения временных интервалов , таких как «21 час».)

Документация поддерживает оба варианта. Это из документации TimeSpan :

Структура TimeSpan также может использоваться для представления времени суток, но только в том случае, если время не связано с конкретной датой.

С другой стороны, в статье MSDN Выбор между DateTime, DateTimeOffset и TimeZoneInfo упоминается следующее:

Структура DateTime подходит для приложений, которые делают следующее:
* Работа только с датами.
* Работа только со временем.
[...]


T-SQL

SQL Server имеет тип данных time.

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

В C # нет типа для хранения только времени.Существует TimeSpan, но он предназначен для хранения периода времени и не является компонентом только DateTime (т. Е. Часов и минут).

Начиная с SQL Server 2008, существует timeвведите ( Используя данные даты и времени ), что действительно сохраняет только компонент времени.

РЕДАКТИРОВАТЬ: Сначала неправильно прочитал ваш вопрос.TimeSpan - это именно то, что вам нужно, и его можно сохранить в формате time с SQL 2K8.

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

Timespan в C # - это то, как вы манипулируете временными интервалами.Вопреки тому, что говорят другие авторы, я не думаю, что тип данных Time является правильным для хранения временных интервалов в SQL, если вы на самом деле не хотите хранить время начала и время окончания, а не временной интервал (например, 1 час в вашем примере),Это для хранения времени суток, немного похоже на DateTime, но без даты.Когда я хочу сохранить временной интервал в SQL, я просто использую int и затем представляю единицу времени, соответствующую тому, что я пытаюсь сделать (например, минуты, секунды, миллисекунды и т. Д.)

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

В C # вы, вероятно, захотите использовать структуру TimeSpan , если вы просто хотите сохранить время интервал .Однако вы, похоже, хотите сохранить время начала и время окончания, что потребует сохранения двух значений.Поэтому вы можете использовать два TimeSpans (например, на основе количества минут от полуночи для представления времени) или просто использовать два значения DateTime и отбросить компонент даты.

Как уже отмечалось, SQL Server 2008 имеет тип данных Time , но он недоступен в более ранних версиях, которые имеют только DateTime.Вы также можете просто сохранить Int, представляющее количество минут после полуночи, которое можно легко преобразовать в TimeSpan (TimeSpan interval = TimeSpan.FromMinutes(60)).

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