【问题标题】:How to find the difference between two time intervals [duplicate]如何找到两个时间间隔之间的差异[重复]
【发布时间】:2015-03-22 02:17:26
【问题描述】:

例如,我如何找到(01/23/2015 10:10 am 和 01/24/2015 06:00 am)之间或(01/23/2015 10:10 pm 和 01 之间)之间的时差/24/2015 06:00 am),或介于(01/24/2015 05:10 am 和 01/24/2015 06:00 am)之间。

主要目的:我有一个定时任务方法,正好在早上 6:00 运行,定时任务写在 global.aspx 中。我想找到启动应用程序和早上 6:00 之间的正确时间差。根据那个时间差,我可以让线程保持睡眠直到那个时间,然后运行该方法。

如果我们从较低的值(10-6)中减去较高的值,则从提供的解决方案中得出肯定的结果。但是如果从较高的值(6-10)中减去较低的值,它会给我一个否定的结果。在这种特殊情况下,我不能将其用作要提供的值:System.Threading.Thread.Sleep(TimeSpan.FromHours(result))。

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

【问题讨论】:

  • 您的时间值是否已存储在DateTime 对象中?如果没有,他们可以吗?请具体说明您要做什么。见stackoverflow.com/help/how-to-ask
  • @Esoteric 注意。我对这个问题的解释不同。这非常令人困惑。到目前为止,所有回答过的人似乎都以同样的方式解释它。
  • @rikitikitik 同意。希望编辑已经澄清了它。
  • @EsotericScreenName:实际上,您的编辑已经完全改变了含义,并且 not 有助于“澄清”问题。您对问题进行了错误的解释,并重写了问题以符合您自己对它的误解。实际上,您的编辑是自相矛盾的(您将第一个和第二个示例合并为一个以匹配您的误解,但第三个示例保持原样),并且与 OP 阐述的最后一段相冲突。
  • @peter :部分段落编辑已正确完成。我正在更正问题,请再次检查。谢谢

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


【解决方案1】:

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

【讨论】:

  • 这似乎不会告诉您两个时间值之间的差异。只有哪一个比另一个大(如果有的话)。
  • 这个问题是关于两个时间跨度之间的差异,而不是两个日期时间。
【解决方案2】:

如果你有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 ;
    

任何组合都是无效的。

【讨论】:

    【解决方案3】:

    一般来说,可以从另一个值中减去一个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 重载,允许您编写表达式以更易读的方式计算差异。其他常见的日期/时间计算也存在类似的运算符重载。

    【讨论】:

    • 这个问题是关于两个时间跨度之间的差异,而不是两个日期时间。
    • OP 写了“时间间隔”,但从他的示例数据(包括实际的日期)来看,他显然是指一些特定的时间点,即DateTime
    • @peter 感谢您的理解。您的解决方案很好,但不适用于提到的所有三种情况。请再次检查我的要求并帮助我,如果您有任何问题请告诉我查询
    • @SaiKrishna:我不明白你的意思。我展示的代码会给你一个TimeSpan。 .NET 中等待一段时间的所有机制都接受TimeSpan 值作为延迟间隔。如果我的示例没有回答您的问题,那么您需要比“它不适用于提到的所有三种情况”更具体。这对他们不起作用怎么办?请把你的解释放在问题本身中。
    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 2019-09-28
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多