例如,我如何找到(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))。
请帮助我提供处理所有问题的逻辑 提到了三种情景并给出了积极的结果价值。
答案 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 ;
DateTime
和Timespan
的差异是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
,允许您编写表达式以更易读的方式计算差异。其他常见日期/时间计算也存在类似的运算符重载。