Ответ 1
попробуйте использовать свойство Date
в объекте DateTime
...
if(dtOne.Date == dtTwo.Date)
....
Есть ли способ сравнить 2 DateTime-переменные в Linq2Sql, но игнорировать часть времени.
Приложение хранит элементы в БД и добавляет опубликованную дату. Я хочу сохранить точное время, но все же смогу вытащить сама дата.
Я хочу сравнить 12/3/89 12:43:34 и 12/3/89 11:22:12 и не игнорировать фактическое время суток, поэтому оба они считаются одинаковыми.
Я думаю, что я могу установить все время дня до 00:00:00, прежде чем сравнивать, но я действительно хочу знать время дня, когда я просто хочу сравнить только по дате.
Я нашел код, который имеет ту же проблему, и они сравнивают год, месяц и день отдельно. Есть ли лучший способ сделать это?
попробуйте использовать свойство Date
в объекте DateTime
...
if(dtOne.Date == dtTwo.Date)
....
Для правильного сравнения вы можете использовать:
dateTime1.Date.CompareTo(dateTime2.Date);
Вот как я это делаю, чтобы работать с LINQ.
DateTime date_time_to_compare = DateTime.Now;
//Compare only date parts
context.YourObject.FirstOrDefault(r =>
EntityFunctions.TruncateTime(r.date) == EntityFunctions.TruncateTime(date_to_compare));
Если вы используете только dtOne.Date == dtTwo.Date
, он не будет работать с LINQ (ошибка: указанный тип member 'Date' не поддерживается в LINQ to Entities)
Если вы используете Entity Framework <v6.0, то используйте EntityFunctions.TruncateTime
Если вы используете Entity Framework> = v6.0, используйте DbFunctions.TruncateTime
Используйте любой (в зависимости от вашей версии EF) вокруг любого свойства класса DateTime
вы хотите использовать в вашем запросе Linq
пример
var list = db.Cars.Where(c=> DbFunctions.TruncateTime(c.CreatedDate)
>= DbFunctions.TruncateTime(DateTime.UtcNow));
DateTime dt1 = DateTime.Now.Date;
DateTime dt2 = Convert.ToDateTime(TextBox4.Text.Trim()).Date;
if (dt1 >= dt2)
{
MessageBox.Show("Valid Date");
}
else
{
MessageBox.Show("Invalid Date... Please Give Correct Date....");
}
DateTime? NextChoiceDate = new DateTime();
DateTIme? NextSwitchDate = new DateTime();
if(NextChoiceDate.Value.Date == NextSwitchDate.Value.Date)
{
Console.WriteLine("Equal");
}
Вы можете использовать это, если используете NULL DateFields.
DateTime dt1=DateTime.ParseExact(date1,"dd-MM-yyyy",null);
DateTime dt2=DateTime.ParseExact(date2,"dd-MM-yyyy",null);
int cmp=dt1.CompareTo(dt2);
if(cmp>0) {
// date1 is greater means date1 is comes after date2
} else if(cmp<0) {
// date2 is greater means date1 is comes after date1
} else {
// date1 is same as date2
}
DateTime econvertedDate = Convert.ToDateTime(end_date);
DateTime sconvertedDate = Convert.ToDateTime(start_date);
TimeSpan age = econvertedDate.Subtract(sconvertedDate);
Int32 diff = Convert.ToInt32(age.TotalDays);
Значение diff представляет собой количество дней для возраста. Если значение отрицательное, дата начала падает после даты окончания. Это хорошая проверка.
В члене join или where используйте свойство Date
для столбца. За кулисами выполняется операция CONVERT(DATE, <expression>)
. Это должно позволить вам сравнивать даты без времени.
int o1 = date1.IndexOf("-");
int o2 = date1.IndexOf("-",o1 + 1);
string str11 = date1.Substring(0,o1);
string str12 = date1.Substring(o1 + 1, o2 - o1 - 1);
string str13 = date1.Substring(o2 + 1);
int o21 = date2.IndexOf("-");
int o22 = date2.IndexOf("-", o1 + 1);
string str21 = date2.Substring(0, o1);
string str22 = date2.Substring(o1 + 1, o2 - o1 - 1);
string str23 = date2.Substring(o2 + 1);
if (Convert.ToInt32(str11) > Convert.ToInt32(str21))
{
}
else if (Convert.ToInt32(str12) > Convert.ToInt32(str22))
{
}
else if (Convert.ToInt32(str12) == Convert.ToInt32(str22) && Convert.ToInt32(str13) > Convert.ToInt32(str23))
{
}