简单的方法来处理时间在C#中?(Simple way to handle time in C#?)

2019-07-17 16:57发布

我目前的做法是一样的东西

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时间跨度的手段,但这是次要的。

Answer 1:

这不是完全清楚你所说的“比startHour更大”的意思......但考虑

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

...作品倒也干脆。

通过一切手段添加参数检查,以确保你没有指定startHour一个值,该值< 0或> 23小时,但是这一切都非常简单。

.NET的日期和时间API是,比方说,约达时间相比相当原始的(甚至3.5) - 但在这种特殊情况下,我认为这不是太糟糕了。



Answer 2:

一个小提示 - .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) {
    ...
}


Answer 3:

您应该使用时间跨度为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) {
    //...
}


Answer 4:

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

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

这有什么错这样做呢?



文章来源: Simple way to handle time in C#?