sql datetime和datetime.Now的比较
本文关键字:datetime 比较 sql Now | 更新日期: 2023-09-27 18:28:33
我正在尝试比较sql表datetime值和Datetime.Now
之间的时间
sql表中的值没有秒(i-e 1900-01-01 00:23:00.000)并且我的Datetime.Now
值也是秒部分(i-e 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.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 ...
}
首先,您应该只声明DateTime.Now
一次,并在整个过程中使用声明的值,以避免在过程中更改DateTime.Now
值,从而使您的比较无效(因为它们不会比较相同的DateTime
)。
DateTime dtnow = DateTime.Now; //use dtnow for the subsequent comparison
在您的第一个if
之前,在上面声明dtnow
。
其次,关于您的问题,您可以使用DateTime
类中的Add[Time]
方法删除DateTime
的秒和毫秒部分。这样的东西就可以了:
dtnow = dtnow.AddSeconds(-dtnow.Second).AddMilliseconds(-dtnow.Millisecond); //Note the negative sign
通过这种方式,您可以去除不想使用的过多的秒和毫秒,并且可以进行干净的比较了!
您可以使用DateTime中的属性Date,然后使用AddHours和AddMinutes
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 ...
}
}
}
}
}