//你的基本数据是在什么地方?数据库中?文本中?变量中?常量中?
for I := 0 to N - 1 do
  if (Now >= StartTime[I]) and (Now <= EndTime[I]) then begin
    { ???????????? }
    Break;
  end;

解决方案 »

  1.   

    因为每一次的时间段的数量都不等,所以建议你用动态数组放这样的时间段,比如:
    TPeriod=record
      StartTime: TDateTime;
      EndTime: TDateTime;
    end;Periods: array of TPeriod;然后在比较的时候用下面的循环
    for i:=Low(Periods) to High(Periods) do
      if (Now>=Periods[i].StartTime)and(Now<=Periods[i].EndTime) then
      begin
        ...
        Break;
      end;在设置数组时,先使用SetLength设置数组元素的个数就可以了。
      

  2.   

    select end_dt from table 
    where((start_dt between p_start_dt and p_end_dt) 
    or (end_dt between p_start_dt and p_end_dt))and rownum < 2;