我目前的做法是一样的东西
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
}
这是非常麻烦的,甚至易出故障。 时间跨度不溶液,据我所看到的,因为它们代表跨度,并且不被的24小时内限制约束(56小时34分是有效的时间跨度)。
什么是这种类型的计算的最佳方法?
我在想什么?
编辑:经过我的计算办法一个完整的DateTime实例有一个小时,分,秒表示一天的实际时间和方式的三胞胎工作在三重比较(加时,分秒)。
编辑2:谢谢大家,我得到了日期时间API的要点,现在,我想。 :)我想的唯一的事情是指定应该仅代表的TimeOfDay时间跨度的手段,但这是次要的。
这不是完全清楚你所说的“比startHour更大”的意思......但考虑
TimeSpan startHour = new TimeSpan(12, 25, 43);
if (endHour.TimeOfDay > startHour)
{
...
}
...作品倒也干脆。
通过一切手段添加参数检查,以确保你没有指定startHour一个值,该值<
0或>
23小时,但是这一切都非常简单。
.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) {
...
}
您应该使用时间跨度为startHour和endHour。 当与现在相比,你应该将它们“转换”到一个完整的日期时间或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
}
这有什么错这样做呢?