1

私は C++ Builder を使用しており、2 つの時間が同じかどうかを確認するための助けが必要です。

これが私のコードです:

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

これらの値は同じように見えます。ShowMessage ステートメントで確認しましたが、表示されるメッセージは両方とも時間形式であり、同じ値です。

ただし、それらを比較すると、次のステートメントが使用されます。

if (appDateFromVector == appDateFromControl)

私は本当の声明を得ていません。2 つの時間が同じかどうかを確認するために必要な別のプロセスはありますか?

ありがとう

4

2 に答える 2

1

これはエンバカデロのドキュメントからのものです

System::TDateTime クラスは、日時値を保持する double として宣言された val データ メンバーを継承します。System::TDateTime 値の整数部分は、1899 年 12 月 30 日から経過した日数です。System::TDateTime 値の小数部分は時刻です。

演算子を使用するときに等しいかどうかがテストされるのはこの double である==ため、時間のごくわずかな違いが、一見同じように見える時間が等しくない結果になる可能性があります。等しいかどうかをテストするために必要な精度の解像度 (たとえば、最も近い秒まで) について考えてから、日付時刻を適切にフォーマットされた文字列に変換し、文字列が等しいかどうかをテストする関数の使用を検討する必要があります。

これは私が時間の平等性をテストする方法ですが、平等性テストに 1 秒よりも高い解像度は必要ありません。TDateTime を文字列として出力するには、これを見てください。

于 2012-09-26T12:34:08.627 に答える
0

C++Builder には、TDateTime 値を比較するための多くのヘルパー関数があります。以下の例に含まれている 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.");
} 
于 2012-09-27T21:59:43.923 に答える