Будьте осторожны. TimeSpan
предназначен для измерения истекшей продолжительности времени, в то время как time
в SQL Server - это именно время суток. Это две разные концепции.
Иногда это путается. Например, DateTime.TimeOfDay
- это тип TimeSpan
- что противоречит его дизайну. Это разумный компромисс, поскольку нет Time
типа .Net, и он может подходит.
Но TimeSpan
, который составляет 24 часа и более, будет не вставляется в SQL-сервер time
.
Кроме того, TimeSpan
основан на стандартных днях. Вы можете создать его с TimeSpan.FromHours(26)
, и он будет представлять «1 день и 2 часа». Если вы позвоните TimeSpan.FromHours(26).ToString()
, это будет "1.02:00:00"
.
Если вы сохраняете истекшую продолжительность времени (а не время суток), используйте TimeSpan
в .Net, но используйте целочисленный тип в SQL Server. Определите, для каких единиц вам нужна точность, и это поможет вам выбрать тип данных.
Например, вы можете сохранить полную точность TimeSpan.Ticks
с использованием типа SQL Server bigint
. Но, вероятно, вы будете хранить TimeSpan.TotalSeconds
, используя int
. При загрузке вы можете использовать TimeSpan.FromSeconds
, чтобы вернуться к типу TimeSpan
.
Также имейте в виду, что TimeSpan
может быть отрицательным, который представляет собой перемещение назад во времени.
Кстати, если вы использовали библиотеку Noda Time - эти концепции будут разделены для вас в типах Duration
и LocalTime
.
Если то, что вы были после того, как способ разобрать строку как "26:00:00"
вы не может сделать это с TimeSpan
. Но вы можете использовать Noda Time:
// starting from this string
string s = "26:00:00";
// Parse as a Duration using the Noda Time Pattern API
DurationPattern pattern = DurationPattern.CreateWithInvariantCulture("H:mm:ss");
Duration d = pattern.Parse(s).Value;
Debug.WriteLine(pattern.Format(d)); // 26:00:00
// if you want a TimeSpan, you can still get one.
TimeSpan ts = d.ToTimeSpan();
Debug.WriteLine(ts); // 1.02:00:00
Ну это '26' допустимое значение? вы должны проанализировать его как int, а затем проверить, больше ли он 23 или нет. Угадайте, что значение не будет сохранено в базе данных, если его более 24 часов – V4Vendetta