4

たとえば05.04.2002、 と の 2 つの文字列があり23.01-2002 - 23.06.2002ます。

最初の文字列の日付が 2 番目の文字列の日付の間にあるかどうかを確認するにはどうすればよいですか?

私が考えてきたこと

dateString := '05.04.2002';
dateRangeString := '23.01-2002 - 23.06.2002';

date := StrToDate( dateString );
rangeStart := StrToDate( LeftStr(dateRangeString, 10) );
rangeEnd := StrToDate( RightStr(dateRangeString, 10) );

そこから先、どうしたらいいのかわからない!

4

3 に答える 3

9

単位System.DateUtilsとその関数DateInRangeを使用できます。

var
  dStart, dEnd, d2Test: TDate;
begin
  dStart := StrToDate('25/07/2012');
  dEnd   := StrToDate('29/07/2012');

  d2Test := StrToDate('26/07/2012');

  if DateInRange(d2Test, dStart, dEnd) then
    ShowMessage('In range!');

必要に応じて、この関数の 4 番目のパラメーター ( AInclusive: Boolean = True) を確認することもできます...

于 2012-07-25T10:07:50.227 に答える
3

TDateTime変数は基本的に変数doubleであり、2 つの日時値 (日時値と見なされる) 間の順序は、実数と見なされる値間の順序と同じです。

procedure TForm4.FormCreate(Sender: TObject);
var
  d1, d2, d: TDate;
begin
  d1 := StrToDate('2012-07-25');
  d2 := StrToDate('2012-07-29');

  d := StrToDate('2012-07-26');

  if (d1 <= d) and (d <= d2) then
    ShowMessage('In range!');
end;

もちろん、 を使ってMath書くこともできます

  if InRange(d, d1, d2) then
      ShowMessage('In range!');
于 2012-07-25T09:53:10.773 に答える
2

これに追加したい唯一のことは、日付が YYYY-MM-DD でフォーマットされている場合、単純にそれらを比較して、日付が範囲内にあるかどうかを判断できることです。最初に TDateTime に変換する必要はありません。

R1 := '2012-01-01';
R2 := '2012-01-31';
D := '2012-01-15';

if (D >= R1) and (D <= R2) then
  // within range
于 2012-07-25T11:31:58.653 に答える