我有一个名为“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的值)
有没有人对我做错了什么有任何建议,我应该改变什么来实现我追求的目标?
谢谢!
答案 0 :(得分:4)
您可以通过以下方式测试两个日期之间的时间:
var lastActivated = DateTime.Now;
if (DateTime.Now.Subtract(lastActivated).TotalSeconds > 1)
{
// Do whatever you need.
}
DateTime.Subtract(DateTime)返回两个给定日期之间时差的TimeSpan。
答案 1 :(得分:3)
上次有效日期小于当前时间,您应该从当前时间减去它:
if (!lastActivate.HasValue || (DateTime.Now - lastActivate.Value).TotalSeconds > 1)
{
//stuff
}
答案 2 :(得分:2)
问题:您正在以相反的顺序减去,您应该subtract
当前时间lastActivate
的{{1}}时间。{
否则,当您从DateTime.Now
中减去-ve
时,您将始终获得DateTime.Now
值,因为lastActivate
时间始终小于当前时间lastActivate
。
解决方案:
此:
(DateTime.Now)
应该是:
(TimeSpan)(lastActivate - DateTime.Now)
完整代码:
(TimeSpan)(DateTime.Now - lastActivate)