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