C# sql datetime和datetime之间的比较。现在

C# sql datetime和datetime之间的比较。现在,c#,sql-server,datetime,C#,Sql Server,Datetime,我尝试的是比较sql表datetime值和datetime.Now sql表中的值没有秒(即1900-01-01 00:23:00.000) 还有我的Datetime。现在值也是秒的一部分(即1900-01-01 00:23:47.000)。 当我尝试比较这两个时间时,由于从Datetime.Now开始的秒部分,它跳到下一个if-else条件 这是我的密码 if (MedRmndrDat.Valid) { foreach (var MedReminder in MedRmndrDat.D

我尝试的是比较sql表datetime值和
datetime.Now

sql表中的值没有秒(即1900-01-01 00:23:00.000) 还有我的
Datetime。现在
值也是秒的一部分(即1900-01-01 00:23:47.000)。
当我尝试比较这两个时间时,由于从
Datetime.Now开始的秒部分,它跳到下一个if-else条件

这是我的密码

if (MedRmndrDat.Valid)
{
    foreach (var MedReminder in MedRmndrDat.Data)
    {
        if (Convert.ToBoolean(MedReminder.EveryDay))
        {
            if (DateTime.Now >= MedReminder.MedicationIntakeStartDate)
            {
       **//it is not performing this if condition, it keeps jumping on next condition***                                  
                if (DateTime.Now==MedReminder.TimeSchedule1) 

                {
                    MessageSenderUtility.Sendsms(MobileNum, item.UserName, MedReminder.Description, MedReminder.MedicationName, MedReminder.Quantity.ToString());
                }

                else if (DateTime.Now == MedReminder.TimeSchedule2)
                {
                   ... Some code ...
                }

                else if (DateTime.Now == MedReminder.TimeSchedule3)
                {
                       ... Some code ...
                }
            }
        }
    }
}

您可以从DateTime使用属性Date,然后使用AddHoursAddMinutes

var myDate = DateTime.Now;
myDate = myDate.Date.AddHours(myDate.Hour).AddMinutes(myDate.Minute)
然后你的代码将是这样的

if (MedRmndrDat.Valid)
{
    var now = DateTime.Now;
    now = now.Date.AddHours(now.Hour).AddMinutes(now.Minute)
    foreach (var MedReminder in MedRmndrDat.Data)
    {
        if (Convert.ToBoolean(MedReminder.EveryDay))
        {
            if (DateTime.Now >= MedReminder.MedicationIntakeStartDate)
            {
                if (now == MedReminder.TimeSchedule1) 
                {
                    MessageSenderUtility.Sendsms(MobileNum, item.UserName, MedReminder.Description, MedReminder.MedicationName, MedReminder.Quantity.ToString());
                }

                else if (now == MedReminder.TimeSchedule2)
                {
                   ... Some code ...
                }

                else if (now == MedReminder.TimeSchedule3)
                {
                       ... Some code ...
                }
            }
        }
    }
}

首先,您应该只声明一次
DateTime.Now
,并在整个过程中使用声明的值以避免
DateTime.Now
值在过程中被更改,从而使比较无效(因为它们不比较相同的
DateTime

在你的第一次之前
dtnow
以上声明

其次,关于您的问题,您可以使用
DateTime
类中的
Add[Time]
方法删除
DateTime
的秒和毫秒部分。这样做可以:

dtnow = dtnow.AddSeconds(-dtnow.Second).AddMilliseconds(-dtnow.Millisecond); //Note the negative sign

这样,您就可以删除不想使用的多余的秒数和毫秒数,并准备进行干净的比较

您需要去掉DateTime的秒数和毫秒数。现在
将其用于比较

因此,您必须首先将当前时间存储在局部变量中:

DateTime testTime = DateTime.Now;
testTime = testTime.AddSeconds(-testTime.Second).AddMilliseconds(-testTime.Millisecond);
然后在比较中使用它:

if (testTime >= MedReminder.MedicationIntakeStartDate)
{
    if (testTime == MedReminder.TimeSchedule1) 
    {
        ... some code
    }
    else if (testTime == MedReminder.TimeSchedule2)
    {
       ... some code ...
    }
    else if (testTime == MedReminder.TimeSchedule3)
    {
       ... some code ...
    }

如何比较它们?调试代码时,你真的确定看到了这些值吗?是的,sql datetime现在有秒,但datetime.now有秒。我很确定它正在使条件为false@SonerGönül@dotctor我只想比较从time@Ian谢谢,它起作用了。这不起作用,因为表中的数据包括小时和分钟。@ChrisF是的,它起作用了,
.Date
属性从日期时间中删除时间,从数据库中获取的日期是否随时间而来并不重要。但是,如果数据库中的小时和分钟很重要,则它将无法按预期工作。@Alberto Monteiro我想要日期和时间,但不是sql datetime和datetime中的秒数。now@ChrisF确切地说,在我的节目中,时间和分钟是重要的,但不重要secondsThanks@ChrisF这正是我想要的谢谢
if (testTime >= MedReminder.MedicationIntakeStartDate)
{
    if (testTime == MedReminder.TimeSchedule1) 
    {
        ... some code
    }
    else if (testTime == MedReminder.TimeSchedule2)
    {
       ... some code ...
    }
    else if (testTime == MedReminder.TimeSchedule3)
    {
       ... some code ...
    }