Я использую C ++ Builder, и мне нужна помощь, чтобы увидеть, если два раза одинаковы.
Вот мой код:
TDateTime appDateFromVector = TimeOf(appointmentsForFind[i].getAppDateTime());
DateTime appDateFromControl = TimeOf(DateTimePickerAppointmentTime->Time);
Эти значения кажутся одинаковыми. Я проверил с помощью оператора ShowMessage, и сообщение отображается в формате времени, и они имеют одинаковое значение.
При сравнении их, однако, со следующим утверждением:
if (appDateFromVector == appDateFromControl)
Я не получаю правдивого заявления. Нужен ли другой процесс, чтобы проверить, совпадают ли два раза?
Спасибо
Это из документации Embarcadero
Класс System :: TDateTime наследует элемент данных val, объявленный как
double, который содержит значение даты и времени. Неотъемлемая часть
Значение System :: TDateTime — количество дней, прошедших с
12/30/1899. Дробная часть значения System :: TDateTime — это
время суток
Именно этот двойник проверяется на равенство при использовании ==
оператор и, следовательно, очень незначительные различия во времени могут привести к тому, что, по-видимому, подобные времена будут выглядеть неравными. Вам следует подумать о разрешении точности, которое требуется для проверки на равенство (например, с точностью до ближайшей секунды), а затем рассмотреть возможность использования функций, которые преобразуют дату и время в надлежащим образом отформатированную строку, и проверить на равенство строк.
Именно так я проверяю равенство времен, но мне никогда не нужно более высокое разрешение, чем одна секунда для теста на равенство. Посмотрите на это для вывода TDateTime как строка
C ++ Builder имеет ряд вспомогательные функции для сравнения значений TDateTime. Посмотри на CompareTime а также В то же время, который я включил в пример ниже.
TDateTime TimeA, TimeB;
// offset TimeB by one hour
TimeA = Now();
TimeB = IncHour(TimeA, 1);
// use CompareTime function
if (CompareTime(TimeA, TimeB) == EqualsValue)
{
ShowMessage("Both times are equal.");
}
// use SameTime function
if (SameTime(TimeA, TimeB))
{
ShowMessage("Both times are equal.");
}