С# DateTime приходится на последние 24 часа

У меня есть объект DateTime, который я бы хотел проверить и посмотреть, попадает ли он за последние 24 часа.

Я сделал что-то вроде этого, но не так:

myDateTime > DateTime.Now.AddHours(-24) && myDateTime < DateTime.Now

Где я ошибся?

Ответ 1

В коде, который вы разместили, нет ничего плохого, поэтому все, что вы сделали неправильно, находится где-то еще в коде.

Я вижу только два незначительных недостатка в коде, но они влияют только на угловые случаи:

Вам следует избегать повторного использования свойства DateTime.Now в коде. Его значение изменяется, поэтому вы можете получить несогласованные результаты в некоторых случаях, когда значения меняются от одного использования к другому.

Чтобы получить временной интервал, вы обычно соединяете один включительно и один эксклюзивный оператор, например > и <=, или >= и <. Таким образом, вы можете проверять интервалы рядом друг с другом, например 0 - 24 часа и 24 - 28 часов, без получения пробела или перекрытия.

DateTime now = DateTime.Now;
if (myDateTime > now.AddHours(-24) && myDateTime <= now)

Ответ 2

  • Только получить DateTime.Now один раз внутри функции - иначе значение может измениться.
  • Используйте <=, а не <. если вы проверите микросекунду по истечении установленного времени, она будет по-прежнему равна DateTime.Now. Я на самом деле столкнулся с этим в производственном коде, где импорт не отображался в другом запросе, который проверял <, потому что импорт был слишком быстрым!

Используйте этот код:

DateTime now = DateTime.Now;
DateTime yesterday = now.AddDays(-1);
if (myDateTime > yesterday && myDateTime <= now) {
    ...
}