4

我有两个字符串,例如05.04.2002and 23.01-2002 - 23.06.2002

如何确定我的第一个字符串中的日期是否介于第二个字符串中的日期之间?

我一直在想什么

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!');

您还可以检查此函数的第四个参数(AInclusive: Boolean = True)...根据您的需要...

于 2012-07-25T10:07:50.227 回答
3

TDateTime变量本质上是一个变量double,两个日期时间值(视为日期时间值)之间的顺序与视为实数的值之间的顺序相同。

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 回答