Ваш пример кода на самом деле не имеет смысла, так как он не представляет истинный код C #.Я предполагаю, что вы пытаетесь сравнить типы переменных C # DateTime, и вы можете запутаться, что когда эти переменные DateTime преобразуются в строки, как в ваших выходных данных, они могут «выглядеть» одинаковыми, но при проверке на равенство выполучить ложный результат.Это связано с тем, что то, что хранится для даты и времени (необработанные двоичные данные), и то, что вы видите, когда записываете их на экран (фактически вызывая .ToString ()) - это две совершенно разные вещи.
DateTimes эффективно отслеживают времяпримерно до миллисекунды, даже если она не выводится при печати.Из-за этого у вас может быть два значения DateTime, которые выглядят одинаково, но отражают разные значения.
Чтобы увидеть это, попробуйте вывести значения общего количества миллисекунд или тиков из каждого из ваших значений:
Debug.Writeline(Time.Ticks);
Debug.Writeline(contractNSQ100.Expiry.AddHours(-57).AddMinutes(59).Ticks);
Я подозреваю, что вы получите два одинаковых, но разных числа.
При сравнении даты и времени для целей тестирования сначала выберите порог, в котором времена будут считаться эквивалентными.Если вас волнует только время до минуты, мы можем использовать Минуту в качестве порога.Оттуда мы сравним время:
var comparisonTime = contractNSQ100.Expiry.AddHours(-57).AddMinutes(59);
bool areSame = Math.Abs((Time.Subtract(comparisonTime).TotalMinutes) < 1;
Это сравнит два раза и сообщит, если они находятся в пределах 1 минуты друг от друга.Чтобы определить, находятся ли они в течение 1 секунды, измените TotalMinutes
на TotalSeconds
.Вызов Math.Abs()
позволяет выполнить сравнение независимо от того, находится ли значение Time до или после времени сравнения.