C#比较两天,分钟没有正确比较

C#比较两天,分钟没有正确比较,c#,datetime,C#,Datetime,我有这种困惑比较2天,分都比较不好。 我也在使用WPF开发电子邮件发送,并在其中添加了计时器 在调用方法中,我比较了两个日期和时间 private void CallTimer() { try { DateTime lastSendDate = DateTime.Now; int afterDays = 0; Dispatch

我有这种困惑比较2天,分都比较不好。 我也在使用WPF开发电子邮件发送,并在其中添加了计时器
在调用方法中,我比较了两个日期和时间

private void CallTimer()
        {
            try
            {
 
                DateTime lastSendDate = DateTime.Now;  
                int afterDays = 0;  
                Dispatcher.Invoke(new Action(() => {
 
                    afterDays = int.Parse(txtDays.Text); 
                lastSendDate = clsDb.LastSendTime;              

                DateTime timStr = DateTime.Now.AddDays(afterDays);
 
                    DateTime nowTime = DateTime.Now;

                int days = (timStr - lastSendDate).Days;
                int hrs = (timStr - lastSendDate).Hours;
                int min = (timStr - lastSendDate).Minutes;
                System.Diagnostics.Debug.Print("timStr : " + timStr + " lastSendDate : " + lastSendDate);
 
                    if (days == 0 && hrs == 0 && min == 0)
                    { 
                        ....
                    }
                }));
            }
            catch (Exception ex)
            {
                ....
            }
        }
在输出窗口中打印消息时,即使有一分钟的差异,if语句也会变为true(if(days==0&&hrs==0&&min==0))

我看到这种行为的确切值 调试细节 timStr:12/10/2020 11:34:44 AM最后发送日期:12/10/2020 11:35:00 AM

期望的行为

timStr:12/10/2020 11:35:00 AM最后发送日期:12/10/2020 11:35:00 AM

可能的原因是什么,有什么改进代码的建议吗?


是不是因为我在倒计时、清洁和重建以运行解决方案?

请注意,不应直接比较这些时间。如果你花了两次时间,时间不可能完全相同。 如果只比较分钟、秒等,可能会陷入舍入问题。 一个更好的比较是

 DateTime timStr = DateTime.Now.AddDays(afterDays);
 
 double timeDiff = (timStr - lastSendDate).TotalSeconds;
 if(timeDiff < 0) ....
DateTime timStr=DateTime.Now.AddDays(afterDays);
double timeDiff=(timStr-lastSendDate).TotalSeconds;
如果(时间差<0)。。。。

请注意,在System.Timers.Timer的回调中调用Dispatcher.Invoke时,最好使用Dispatcher。已在创建计时器的线程中调用了其Tick处理程序。@Clemens您的意思是使用Dispatchermer和Dispatchermer.Tick+=Dispatchermer\u Tick;打电话,当然,但它会按预期输出吗?不知道,我不明白你想做什么。请查看关于发布代码和问题的指导,以提供你看到这种行为的确切值。只有3行- 2的日期/时间创建和一个条件是所有需要显示的问题。有两个日期时间值<代码> 12/10/2020 11:34:44上午< /代码>和代码> 12/10/2020 11:3500上午< /代码>并不意味着至少有一个完整的分钟之间-你必须考虑每一个时间值的秒。根据您的需求,您可能需要考虑诸如<代码>(DT2-DT1)、ToalSudithSo()> 60 之类的内容。