gpt4 book ai didi

c# - 定时器内的日期比较

转载 作者:太空宇宙 更新时间:2023-11-03 22:14:12 26 4
gpt4 key购买 nike

我有一个每秒运行一次的计时器,代码如下:

    public MainWindow()
{
InitializeComponent();

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(1000);
timer.Tick += new EventHandler(someEventHandler);
timer.Start();
}

private void someEventHandler(Object sender, EventArgs args)
{
TVMonitor TVMonitor = new TVMonitor();
if (TVMonitor.NeedsTurningOn())
{
Console.WriteLine("on");
TVCOM.SendCommand(SettingManager.GetTVCode("on") + Environment.NewLine);
}
}

在函数 NeedsTurningOn() 中,我有以下内容:

    public bool NeedsTurningOn()
{
var turnon = (from settings in context.SystemSettings
where settings.SystemSettingName == "TVOnTime"
select settings).First();
if (turnon.SystemSettingValue == String.Empty)
{
return false;
}

DateTime date = Convert.ToDateTime(turnon.SystemSettingValue);
Console.WriteLine("Turnontime: " + date);
Console.WriteLine("currenttim: " + DateTime.Now);
if (date != DateTime.Now)
{
Console.WriteLine("false");
return false;
}
else
{
Console.WriteLine("true");
return true;
}
}

现在在我用于调试的控制台中,我有以下输出:

...
Turnontime: 11/04/2011 14:05:10
currenttim: 11/04/2011 14:05:07
false
Turnontime: 11/04/2011 14:05:10
currenttim: 11/04/2011 14:05:08
false
Turnontime: 11/04/2011 14:05:10
currenttim: 11/04/2011 14:05:09
false
Turnontime: 11/04/2011 14:05:10
currenttim: 11/04/2011 14:05:10
false
Turnontime: 11/04/2011 14:05:10
currenttim: 11/04/2011 14:05:11
false
Turnontime: 11/04/2011 14:05:10
currenttim: 11/04/2011 14:05:12
false
...

为什么在日期相同时仍然​​触发错误而不是正确?

最佳答案

这是因为 DateTime 变量的分辨率为 1 毫秒...您在比较时就好像它的分辨率为 1 秒一样。

尝试:

if (Math.Abs(date.Subtract(DateTime.Now).Milliseconds) < 1000) { ... }

您可以通过将 1000 更改为不同的数字来调整匹配的分辨率...500 将检查 date 是否在当前日期/时间的半秒内。

关于c# - 定时器内的日期比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com