如何找到两个时间间隔之间的差异

时间:2015-01-23 04:44:38

标签: c# asp.net-web-api

例如,我如何找到(2015年1月23日上午10:10和2015年12月24日上午06:00之间)或(01/23/2015 10:10 pm和01之间)之间的时差/ 24/2015 06:00 am),或(2015年1月24日上午05:10和2015年1月24日上午06:00之间)。

主要目的:我有一个完全在早上6点运行的计划任务方法,计划任务写在global.aspx中。我想在我开始申请和上午6:00之间找到正确的时差。基于该时间差,我可以保持线程处于睡眠状态,直到那个时间,然后运行该方法。

从我们提供的解决方案中,如果我们从较低值(10-6)中减去较高值,则会给出正结果。但如果从较高值(6-10)中减去较低值,则会给出负面结果。我无法在这种特殊情况下使用它作为值:System.Threading.Thread.Sleep(TimeSpan.FromHours(result))。

请帮助我提供处理所有问题的逻辑  提到了三种情景并给出了积极的结果价值。

3 个答案:

答案 0 :(得分:0)

DateTime给出了可以使用的比较方法。 DateTime.Compare(d1,d2)返回一个整数。如果返回值小于0,则d1 < d2,如果返回值为0,则d1 = d2,如果返回值> 0,则d1> d2。

答案 1 :(得分:0)

如果您有DateTime和/或Timespan类型,则应该可以使用减法运算符。

  • 2 DateTime值之差为Timespan

    DateTime dt1 = GetSomeValue()    ;
    DateTime dt2 = GetAnotherValue() ;
    Timespan delta = dt1 - dt2 ;
    
  • DateTimeTimespan的差异是DateTime

    DateTime dt = GetSomeValue()    ;
    Timespan ts = GetAnotherValue() ;
    DateTime delta = dt - ts ;
    
  • 两个Timespan实例的差异是Timespan

    Timespan ts1 = GetSomeValue()    ;
    Timespan ts2 = GetAnotherValue() ;
    Timespan delta = ts1 - ts2 ;
    

任何组合都无效。

答案 2 :(得分:0)

通常,可以从另一个值中减去一个DateTime值,这将返回表示两者之间差异的TimeSpan值。但是,从您的问题中不清楚上下文是什么以及您是否已经拥有DateTime值。

如果没有,您可以通过多种方式初始化DateTime值。例如,如果你实际上有你在问题中写的字符串,你可以这样做:

string startTimeText = "01/23/2015 10:10 am", endTimeText = "01/24/2015 06:00 am";
DateTime startTime, endTime;

startTime = DateTime.Parse(startTimeText, null, DateTimeStyles.AssumeUniversal);
endTime = DateTime.Parse(endTimeText, null, DateTimeStyles.AssumeUniversal);

TimeSpan timeDifference = endTime - startTime;

几点说明:

  • 我将AssumeUniversal传递给Parse()方法。进行这些计算需要非常小心。最好是,所有时间都是UTC,或者可以在必须进行计算之前进行转换。否则,如果时区是使用夏令时的时区(即世界上大多数时区),则在处理从DST切换到DST的时间时,您可能会收到错误。
  • -运算符重载DateTime,允许您编写表达式以更易读的方式计算差异。其他常见日期/时间计算也存在类似的运算符重载。