Сравнение двух переменных TDateTime

Я использую C ++ Builder, и мне нужна помощь, чтобы увидеть, если два раза одинаковы.

Вот мой код:

TDateTime appDateFromVector = TimeOf(appointmentsForFind[i].getAppDateTime());
DateTime appDateFromControl = TimeOf(DateTimePickerAppointmentTime->Time);

Эти значения кажутся одинаковыми. Я проверил с помощью оператора ShowMessage, и сообщение отображается в формате времени, и они имеют одинаковое значение.

При сравнении их, однако, со следующим утверждением:

if (appDateFromVector == appDateFromControl)

Я не получаю правдивого заявления. Нужен ли другой процесс, чтобы проверить, совпадают ли два раза?

Спасибо

1

Решение

Это из документации Embarcadero

Класс System :: TDateTime наследует элемент данных val, объявленный как
double, который содержит значение даты и времени. Неотъемлемая часть
Значение System :: TDateTime — количество дней, прошедших с
12/30/1899. Дробная часть значения System :: TDateTime — это
время суток

Именно этот двойник проверяется на равенство при использовании == оператор и, следовательно, очень незначительные различия во времени могут привести к тому, что, по-видимому, подобные времена будут выглядеть неравными. Вам следует подумать о разрешении точности, которое требуется для проверки на равенство (например, с точностью до ближайшей секунды), а затем рассмотреть возможность использования функций, которые преобразуют дату и время в надлежащим образом отформатированную строку, и проверить на равенство строк.

Именно так я проверяю равенство времен, но мне никогда не нужно более высокое разрешение, чем одна секунда для теста на равенство. Посмотрите на это для вывода TDateTime как строка

1

Другие решения

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.");
}
0