2013-08-19 4 views
1

Я хочу создать поле в SQLite DB (используя C#) для хранения поля времени (продолжительности). Значение будет в формате hr:min:sec, например '10:10:00', что означает 10 часов, 10 мин и 00 секунд. Какой тип данных я должен использовать для этого? Я знаю, что DateTime не будет адекватным, так как он используется для хранения даты-времени.Какой тип данных использовать для хранения поля TimeTaken в SQLIte?

+0

Вы должны добавить тег C# на свой вопрос. –

ответ

4

Используйте TimeSpan в C#. Это предназначено для представления истекшей продолжительности времени, которую вы описываете.

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

Например, вы можете сохранить TimeSpan.Ticks, если вам нужна абсолютная точность. Для этого вам понадобится INTEGER из 8 байтов. При загрузке вы можете использовать либо TimeSpan.FromTicks, либо конструктор new TimeSpan(ticks).

Скорее всего, вы захотите сохранить целые количества секунд, которые вы можете получить от TimeSpan.TotalSeconds. Вы могли бы использовать для этого INTEGER из 4 байтов. При загрузке вы можете использовать TimeSpan.FromSeconds, чтобы воссоздать временной интервал из вашего целого.

0

DateTime или TimeSpan было бы более чем достаточно, но SQLite не поддерживает их.

В SQLite, возможные типы данных TEXT, INTEGER, REAL и BLOB (эквивалент .NET String, Int64, Double и Byte массив соответственно).

Все, что вам нужно сделать, это манипулировать вашим C# DateTime или TimeSpan предпочтительным типом данных SQLite.

+0

SQLite может hasle 'DateTime' хорошо, как строка, целое или реальное, в зависимости от' DateTimeFormat', указанного в строке соединения. К сожалению, он не может обрабатывать «TimeSpan» вообще. – xmedeko

0

Я думаю, что ответ @Matt Johnson является самым дополнительным, однако я вышел с другим подходом. В моем случае проблема была немного иной. Я должен был хранить оговорки для ресторана, среди других, я имел эти 2 поля:

  • DateTime StartDateTime

  • TimeSpan Продолжительность

Поскольку вы не можете хранить TimeSpan в Sqlite I создайте имя столбца EndDateTime типа DateTime. Итак, продолжительность - это разница между EndDateTime и StartDateTime, например:

StartDateTime = reader.GetDateTime(5); 
Duration = reader.GetDateTime(6).Subtract(StartDateTime);