【问题标题】:comparision between sql datetime and Datetime.Nowsql datetime 和 Datetime.Now 之间的比较
【发布时间】:2015-12-30 15:23:19
【问题描述】:

我正在尝试比较sql表日期时间值和Datetime.Now之间的时间。
sql 表中的值没有秒数(即 1900-01-01 00:23:00.000) 而我的Datetime.Now 值也需要几秒钟的时间(即 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 ...
                }
            }
        }
    }
}

【问题讨论】:

  • 你想如何比较它们?
  • 调试代码时,您是否真的看到了这些值?
  • 是的 sql datetime 现在有秒数但是 datetime.now 我很确定它使条件为假@SonerGönül
  • @dotctor 我只想比较日期以及时间的小时和分钟
  • @Ian 谢谢它的工作

标签: c# sql-server datetime


【解决方案1】:

您需要去掉 DateTime.Now 的秒数和毫秒数,并在比较中使用它。

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

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 ...
    }

【讨论】:

  • 谢谢@ChrisF,这正是我想要的,非常感谢
【解决方案2】:

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

DateTime dtnow = DateTime.Now; //use dtnow for the subsequent comparison

在您的firstif上方之前声明dtnow

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

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

这样,您就可以去掉多余的秒和毫秒,您不想使用,您就可以进行干净的比较了!

【讨论】:

    【解决方案3】:

    您可以使用 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 ...
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 这不起作用,因为表中的数据包括小时和分钟。
    • @ChrisF 是的,它有效,.Date 属性会从 DateTime 中删除时间,无论您从数据库中获取的日期是否与时间有关。
    • 但是如果数据库中的小时和分钟很重要,它就不会按预期工作。
    • @Alberto Monteiro 我也想要日期和时间,但不是来自 sql datetime 和 datetime.now 的秒数
    • @ChrisF 在我的程序中,小时和分钟很重要,但不是秒
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    相关资源
    最近更新 更多