在比较两个日期时,日期被减去

本文关键字:日期 两个 比较 | 更新日期: 2023-09-27 18:15:27

我在代码中面临一个问题,我将今天的日期与数据库中的日期进行比较,这是我的代码。这里label10.Text包含来自数据库的日期。基本上我在做一个提醒应用程序。如果数据库日期与今天的日期匹配,那么它应该发送一个提醒电子邮件

DateTime dt = DateTime.Parse(label10.Text);
long t = dt.ToFileTime();
DateTime date1 = DateTime.Today;
DateTime date2 = new DateTime(t);
//DateTime date2 = new DateTime(Convert.ToInt64(label10.Text));
//DateTime date2 = new DateTime(2015,9,16);
int result = DateTime.Compare(date1, date2);
string relationship;
if (result > 0)
{
    relationship = "is earlier than";
    //SendEmail();               
}
else if (result == 0)
{
    relationship = "is the same time as";
    SendEmail();
    //MessageBox.Show("is same");
}
else
{
    relationship = "is later than";
    SendEmail();
    //MessageBox.Show("is later");
}
Console.WriteLine("{0} {1} {2}", date1, relationship, date2);

现在的问题是,当我运行应用程序时,日期2被29.09.15填充,而标签10显示30.09.15。我不明白为什么会发生这种情况,我也注意到"dt"被30.09.15 12:00:00 am填充,其中"日期2"29.09.15 06:30:00 PM,我在DB中没有任何其他记录,其提醒日期设置为29.09.15

在比较两个日期时,日期被减去

您是否检查过这个问题是否与当地时间和UTC时间的时差有关?数据库时间可以是UTC时间,而后面的代码使用本地时间。您可以将所有时间转换为本地时间或通用时间。

// for converting to local time
date1.ToLocalTime();
// converting to utc time
date1.ToUniversalTime();

日期的刻度和文件时间是有区别的。tick从1970年1月1日开始计数,filetime从1601年1月1日开始计数。你需要改变这个:

long t = dt.ToFileTime();
DateTime date2 = new DateTime(t);

:

long t = dt.Ticks;
DateTime date2 = new DateTime(t);

或者更简单:

DateTime date2 = dt;