当心。 TimeSpan
旨在测量经过的持续时间,而time
在 SQL Server 中专门是一天中的时间。这是两个不同的概念。
有时这些会混淆。例如,DateTime.TimeOfDay
是一种TimeSpan
类型——这违背了它的设计。这是一个合理的折衷方案,因为 .Net 中没有Time
类型,它可以适合.Net 。
但是TimeSpan
24 小时或更长的时间不适合 SQL Servertime
字段。
此外,aTimeSpan
基于标准天数。您可以创建一个,TimeSpan.FromHours(26)
它将代表“1 天 2 小时”。如果你打电话给TimeSpan.FromHours(26).ToString()
它"1.02:00:00"
。
如果要存储经过的持续时间(不是一天中的某个时间),则TimeSpan
在 .Net 中使用 a,但在 SQL Server 中使用整数类型。确定您想要精度的单位,这将帮助您选择数据类型。
例如,您可以存储TimeSpan.Ticks
使用 SQL Serverbigint
类型的完整精度。但可能你会TimeSpan.TotalSeconds
使用int
. 加载时,您可以使用TimeSpan.FromSeconds
来返回一个TimeSpan
类型。
还要注意 aTimeSpan
可以是负数,表示时间倒退。
顺便说一句,如果您使用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