2012-09-26 120 views
1

我正在使用C++ Builder,並且想要查看兩次是否相同。比較兩個TDateTime變量

這裏是我的代碼:

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

這些值似乎是相同的。我通過ShowMessage語句進行了檢查,並且顯示的消息都是時間格式,並且它們是相同的值。

在比較他們雖然用下面的語句:

if (appDateFromVector == appDateFromControl) 

,我沒有得到一個真正的聲明。是否有另一個過程需要檢查兩次是否相同?

由於

回答

1

這是從Embarcadero的文檔

的系統:: TDateTime類型類繼承的數據VAL構件聲明爲 雙保持該日期時間值。系統:: TDateTime值的組成部分是自 12/30/1899以來經過的天數。系統:: TDateTime值的小數部分是 時間。

正是這種雙重正在使用==運營商和時間,所以非常微小差異會帶來明顯相似的時間出現不平等時平等的測試。您應該考慮準確性解決方案,您需要測試其是否相等(例如,以最近的秒爲單位),然後考慮使用將日期時間轉換爲格式正確的字符串並測試字符串是否相等的函數。

這是我測試時間相等的方式,但我從來不需要比平均測試更高的分辨率。看看這個輸出TDateTime類型爲string

0

C++ Builder中具有比較TDateTime類型值的數量helper functions。看看CompareTimeSameTime,我已經在下面的例子中列出了。

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