我有1个单个文本框,用户将输入小时数。目前,如果他们输入26小时,则由于TimeSpan的HH限制,我们会收到错误消息。该值将存储在SQL Server 2008 Time(7)字段中。
如何识别超过23个小时?不能将其存储为小数,因为程序的另一部分要求此字段为time(7)字段。
TimeSpan estiamtedHours;
private void btnSave_Click(object sender, EventArgs e)
{
estimatedHours = TimeSpan.Parse(tbEstHours.Text);
}
time(7)字段也有24小时的限制,这是最好的解决方法,因为另一种秒表需要使用Time(7)。
谢谢
当心。TimeSpan
旨在测量经过的时间,而time
在SQL Server中则专门用于确定一天中的时间。这是两个不同的概念。
有时这些混在一起。例如,DateTime.TimeOfDay
是一种TimeSpan
类型-与其设计背道而驰。这是一个合理的折衷方案,因为Time
.Net中没有类型,并且可以容纳它。
但是TimeSpan
24小时或更长的时间将不适合SQL Servertime
字段。
另外,aTimeSpan
是基于标准天数的。您可以使用创建一个,TimeSpan.FromHours(26)
它将代表“ 1天2小时”。如果你打电话的TimeSpan.FromHours(26).ToString()
话"1.02:00:00"
。
如果要存储经过的时间长度(而不是一天中的某个时间),请TimeSpan
在.Net中使用,但在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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句