Проблема сравнения даты в том же формате - PullRequest
0 голосов
/ 22 сентября 2019

Я должен сделать функцию if со сравнением двух дат: первая дата - время.Вторая дата - это дата с фиксированной датой.

Мой код:

if (Time == contractNSQ100.Expiry.AddHours(-57).AddMinutes(59))
{
True
}
else
{
False
}

Я протестировал свой формат с:

  Debug ("contractNSQ100.Expiry.AddHours(-57).AddMinutes(59) :" + contractNSQ100.Expiry.AddHours(-57).AddMinutes(59));

 // Return : 9/14/2010 3:59:00 PM

У меня почтипротестируйте мой формат времени с помощью метода отладки, это вернет мне тот же формат.

 // Return : 6/14/2010 3:55:00 AM

Но оператор My If возвращает меня всегда False.

У кого-то есть идея, почему тест:

if (Time == contractNSQ100.Expiry.AddHours(-57).AddMinutes(59)) 

всегда Ложь?

Заранее спасибо!

1 Ответ

0 голосов
/ 23 сентября 2019

Ваш пример кода на самом деле не имеет смысла, так как он не представляет истинный код 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 до или после времени сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...