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