在C#中处理时间的简单方法?

我目前的做法是这样的

DateTime startHour = new DateTime(1900,1,1,12,25,43); DateTime endHour = new DateTime(1900,1,1,13,45,32); // I need to, say, know if a complete DateTime instance // is later than startHour plus 15 minutes DateTime now = DateTime.Now(); startHour = startHour.addMinutes(15); if (now.CompareTo(new DateTime(now.Year, now.Month, now.Day, startHour.Hour, startHour.Minute, startHour.Second)) > 0) { //I can do something now } 

这非常麻烦甚至容易出错。 就我所见,TimeSpans不是解决方案,因为它们代表跨度并且不受24小时限制的约束(TimeSpan为56小时34分钟有效。)

这种计算的首选方法是什么?

我错过了什么?

编辑:我正在进行的计算是比较完整的DateTime实例与表示实际时间的小时,分​​钟,秒三元组以及操作这些三元组的方法(添加小时,分钟秒)的方法。

编辑2:谢谢大家,我认为我现在掌握了DateTime API的要点。 :)我唯一想念的是一种指定TimeSpan的方法,该TimeSpan应仅表示TimeOfDay,但这是次要的。

你完全不清楚“大于startHour”是什么意思……但是服用

 TimeSpan startHour = new TimeSpan(12, 25, 43); if (endHour.TimeOfDay > startHour) { ... } 

……工作非常简单。

通过各种方式添加参数检查以确保您没有为startHour指定一个< 0或> 23小时的值,但这一切都非常简单。

与Joda Time相比,.NET的日期和时间API非常原始(甚至在3.5) - 但在这种特殊情况下,我认为它并不太糟糕。

一点提示 – .NET支持DateTime对象的算术运算,并返回TimeSpan对象。 因此,您可以执行以下操作:

 DateTime fromDate = .... DateTime toDate = .... TimeSpan diff = toDate - fromDate; 

你可以扩展到:

 DateTime fromDate = DateTime.Now; DateTime toDate = DateTime.Now.addMinutes(x); if ((toDate - fromDate).TotalMinutes > 15) { ... } 

您应该将TimeSpan用于startHour和endHour。 与现在比较时,您应该将它们“转换”为完整的DateTime,或者如Jon Skeet所述,使用DateTime.TimeOfDay获取时间。

 TimeSpan startHour = new TimeSpan(12, 25, 43); DateTime now = DateTime.Now; if (now.CompareTo(DateTime.Today.Add(startHour)) > 0) { //... } 

要么

 TimeSpan startHour = new TimeSpan(12, 25, 43); DateTime now = DateTime.Now; if (now.TimeOfDay.CompareTo(startHour) > 0) { //... } 

所以你只对日期的时间部分感兴趣。

 if(DateTime.Now.TimeOfDay > startHour.TimeOfDay) { // do stuff } 

这样做有什么问题?