Даты и время C # 2 не равны

#c# #datetime

#c# #дата и время

Вопрос:

У меня есть одна странная проблема, которую я пытаюсь понять. В моем контроллере есть 2 объекта DateTime, которые я хочу сравнить.

Вы можете увидеть скриншот из отладчика в моем контроллере. Я создаю одну дату и время и получаю другую из модели. На этом шаге вы можете увидеть в отладчике, что date1 отличается от date2 на 2 секунды отладчик - шаг 1

На следующем шаге я удаляю 2 секунды из date2 и сравниваю его с date1

отладчик 2

Может быть, вы объясните мне, почему это false? В отладчике я вижу их оба одинаково.

введите описание изображения здесь

Решение: Как было сказано в комментарии, идея заключалась в том, чтобы проверить также миллисекунды, я совершенно забыл об этом!

Комментарии:

1. Проверьте миллисекунды

2. Как насчет сравнения значений тиков обеих дат?

3. Ну, вы видите, что они такие же, как и секунды. Мы не знаем точного значения model.Available.MinDate . На самом деле это может быть 2016-07-18T18:45:00.001 или что-то в этом роде.

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

5. Попробуйте добавить часы для date1.ToString("o") и date2.ToString("o") . Это покажет все присутствующие цифры. Также DateTimeKind может быть виден суффикс, зависящий от, но это не учитывается при сравнении использования date1 == date2 .

Ответ №1:

Как вы можете видеть в справочном источнике, сравнение двух объектов DateTime выполняется с помощью их соответствующих тиков, которые являются их внутренним представлением.

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

Ответ №2:

Способ сравнения дат и времени выполняется путем сравнения их свойства Tick:

 bool r = date1.Ticks == date2.Ticks;
  

Попробуйте это.

Ответ №3:

Вы можете использовать дату и время.Сравните, чтобы увидеть, какое время раньше / позже. Также, как люди уже упоминали, разница может быть, например, в миллисекундах

Как использовать дату и время.Сравните: https://msdn.microsoft.com/en-us/library/system.datetime.compare (v = против 110).aspx

Комментарии:

1. Можно ссылаться на существующие ответы, но было бы более полезно, если бы вы предоставили несколько дополнительных указаний на то, как люди могут использовать ваше предложение для решения этой или подобных проблем. DateTime.Compare само по себе на самом деле не является ответом на вопрос. Например, как определить из выходных DateTime.Compare данных, которые раньше / позже?