C# 如何找出两个时间间隔之间的差异

C# 如何找出两个时间间隔之间的差异,c#,asp.net-web-api,C#,Asp.net Web Api,例如,我如何查找2015年1月23日上午10:10和2015年1月24日上午6:00之间的时差,或2015年1月23日下午10:10和2015年1月24日上午6:00之间的时差,或2015年1月24日上午5:10和2015年1月24日上午6:00之间的时差 主要用途:我有一个调度任务方法,它在早上6:00运行,调度任务写在global.aspx中。我想找出启动应用程序的时间与上午6:00之间的正确时差。基于这个时差,我可以让线程一直处于睡眠状态,直到那个时候,然后运行这个方法 从提供的解决方案中

例如,我如何查找2015年1月23日上午10:10和2015年1月24日上午6:00之间的时差,或2015年1月23日下午10:10和2015年1月24日上午6:00之间的时差,或2015年1月24日上午5:10和2015年1月24日上午6:00之间的时差

主要用途:我有一个调度任务方法,它在早上6:00运行,调度任务写在global.aspx中。我想找出启动应用程序的时间与上午6:00之间的正确时差。基于这个时差,我可以让线程一直处于睡眠状态,直到那个时候,然后运行这个方法

从提供的解决方案中,如果我们从较低的值10-6中减去较高的值,则会得到一个正结果。但如果从高值6-10中减去低值,就会得到一个负结果。在这种特殊情况下,我不能将其用作提供的值:System.Threading.Thread.SleepTimeSpan.FromHoursresult

请帮助我提供处理所有问题的逻辑
提到了三种情况,并给出了一个正结果值。

DateTime给出了可使用的比较方法。 d2返回一个整数。如果返回值小于0,则d1d2。

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

两个DateTime值的差异是一个时间跨度:

DateTime和Timespan的区别是DateTime:

两个Timespan实例的区别是一个Timespan:


组合的任何值都是无效的。

通常,可以从另一个日期时间值中减去一个日期时间值,这将返回一个表示两个日期时间差的时间跨度值。但是,从你的问题中不清楚上下文是什么,以及你是否已经有了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重载了-运算符,允许您编写表达式以更可读的方式计算差异。对于其他常见的日期/时间计算,也存在类似的运算符重载。
您的时间值是否已存储在DateTime对象中?如果不是的话,他们可以吗?请具体说明你想做什么。见@Esteric。我对这个问题的解释不同。这是非常令人困惑的。到目前为止,所有回答的人似乎都以同样的方式解释了它。@Rikitikik同意。希望编辑已经澄清了它。@EstericScreenName:实际上,您的编辑已经完全改变了它的含义,并且无助于澄清问题。你自己对这个问题有错误的解释,并重写了这个问题,以符合你自己对它的误解。事实上,您的编辑是自相矛盾的。您将第一个和第二个示例合并为一个,以匹配您的误解,但第三个示例保持原样,并且与OP阐述的最后一段冲突。@peter:章节段落编辑正确。我正在更正问题,请再次检查。谢谢这似乎不会告诉你两个时间值之间的差异。只有其中一个比另一个大,如果是的话。这个问题是关于两个时间跨度之间的差异,而不是两个日期时间。这个问题是关于两个时间跨度之间的差异,而不是两个日期时间。OP写了时间间隔,但从他的示例数据中,包括实际日期,他显然指的是一些特定的时间点,例如DateTime。@peter感谢您的理解。您的解决方案很好,但不能适用于上述所有三种情况。请再次检查我的要求,并在这方面帮助我,如果您有任何问题,请告诉我queries@SaiKrishna例如我不明白你的意思。我显示的代码将为您提供时间跨度。NET中所有等待一段时间的机制都接受TimeSpan值作为延迟间隔。如果我的示例不能回答您的问题,那么您需要更加具体,因为它不适用于上述所有三种场景。这对他们不起作用怎么办?请把你的解释写在问题里。
DateTime dt = GetSomeValue()    ;
Timespan ts = GetAnotherValue() ;
DateTime delta = dt - ts ;
Timespan ts1 = GetSomeValue()    ;
Timespan ts2 = GetAnotherValue() ;
Timespan delta = ts1 - ts2 ;
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;