У меня есть объект DateTime
, который я бы хотел проверить и посмотреть, попадает ли он за последние 24 часа.
Я сделал что-то вроде этого, но не так:
myDateTime > DateTime.Now.AddHours(-24) && myDateTime < DateTime.Now
Где я ошибся?
У меня есть объект DateTime
, который я бы хотел проверить и посмотреть, попадает ли он за последние 24 часа.
Я сделал что-то вроде этого, но не так:
myDateTime > DateTime.Now.AddHours(-24) && myDateTime < DateTime.Now
Где я ошибся?
В коде, который вы разместили, нет ничего плохого, поэтому все, что вы сделали неправильно, находится где-то еще в коде.
Я вижу только два незначительных недостатка в коде, но они влияют только на угловые случаи:
Вам следует избегать повторного использования свойства DateTime.Now
в коде. Его значение изменяется, поэтому вы можете получить несогласованные результаты в некоторых случаях, когда значения меняются от одного использования к другому.
Чтобы получить временной интервал, вы обычно соединяете один включительно и один эксклюзивный оператор, например >
и <=
, или >=
и <
. Таким образом, вы можете проверять интервалы рядом друг с другом, например 0 - 24 часа и 24 - 28 часов, без получения пробела или перекрытия.
DateTime now = DateTime.Now;
if (myDateTime > now.AddHours(-24) && myDateTime <= now)
DateTime.Now
один раз внутри функции - иначе значение может измениться.<=
, а не <
. если вы проверите микросекунду по истечении установленного времени, она будет по-прежнему равна DateTime.Now
. Я на самом деле столкнулся с этим в производственном коде, где импорт не отображался в другом запросе, который проверял <
, потому что импорт был слишком быстрым!Используйте этот код:
DateTime now = DateTime.Now;
DateTime yesterday = now.AddDays(-1);
if (myDateTime > yesterday && myDateTime <= now) {
...
}