【问题标题】:Difficulty comparing differences in DateTimes难以比较日期时间的差异
【发布时间】:2013-11-30 15:37:32
【问题描述】:

我有一个名为“lastActivated”的 DateTime 变量,它在 Form_Activated 事件触发时设置为 DateTime.Now。目标是确保在用户从另一个屏幕单击屏幕的前 1 秒内不会发生任何事情。

    DateTime? lastActivate = null; //used to determine the last time the screen was focused. 
    private void Form1_Activated(object sender, EventArgs e)
    {
        lastActivate = DateTime.Now;
    }

判断是否超过1秒的代码如下

    TimeSpan oneSec = new TimeSpan(0,0,1);

    if (lastActivate == null || (TimeSpan)(lastActivate - DateTime.Now) > oneSec)
    {
        //stuff
    }

上面的 if 语句总是,总是失败。即使值是:

    lastActivate    {11/30/2013 10:23:21 AM}    System.DateTime?
    now {11/30/2013 10:32:48 AM}    System.DateTime

(我现在设置了一个临时值 DateTime = DateTime.Now,因此我可以将值粘贴到此处,因为我无法直接访问 DateTime.Now 的值)

有没有人对我做错了什么有什么建议,以及我应该改变什么来实现我所追求的目标?

谢谢!

【问题讨论】:

  • 副业。但是时间跨度有 .TotalSeconds ,它返回总秒数。因此,您无需与“oneSec”时间跨度进行比较。

标签: c# winforms datetime comparison


【解决方案1】:

您可以通过以下方式测试两个日期之间的时间:

var lastActivated = DateTime.Now;

if (DateTime.Now.Subtract(lastActivated).TotalSeconds > 1)
{
    // Do whatever you need.
}

DateTime.Subtract(DateTime) 返回两个给定日期之间时间差的 TimeSpan。

【讨论】:

    【解决方案2】:

    上次活动日期小于当前时间,您应该从当前时间中减去它:

    if (!lastActivate.HasValue || (DateTime.Now - lastActivate.Value).TotalSeconds > 1)
    {
        //stuff
    }
    

    【讨论】:

    • 优秀!谢谢大家的回答。 Lazyberezovsky 先到了那里,所以他得到了答案,但是你们所有人都非常有帮助! :) 谢谢!
    【解决方案3】:

    问题:你正在以相反的顺序减去,你应该从当前时间(DateTime.NowsubtractlastActivate时间。
    否则,当您从lastActivate 中减去DateTime.Now 时,您将始终得到-ve 值,因为lastActivate 时间始终小于当前时间(DateTime.Now)

    解决方案:

    这个:

    (TimeSpan)(lastActivate - DateTime.Now)
    

    应该是:

    (TimeSpan)(DateTime.Now - lastActivate)
    

    完整代码:

    TimeSpan oneSec = new TimeSpan(0,0,1);
    
        if (lastActivate == null || (TimeSpan)(DateTime.Now - lastActivate) > oneSec)
        {
            //stuff
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多