procedure TForm1.Button1Click(Sender: TObject);
var
  vStartTime, vEndTime: TTime;
  T: Real;
  R: Real;
begin
  Randomize;
  vStartTime := StrToTime('07:58:28');
  vEndTime := StrToTime('08:03:57');
  T := vEndTime - vStartTime;
  R := Random;
  while R > T do R := R - T;
  Caption := TimeToStr(vStartTime + R);
end;

解决方案 »

  1.   

    var
      D1, D2: TDateTime;
      R: Real;
    begin
      D1 := StrToDateTime('07:58:28');
      D2 := StrToDateTime('08:03:57');
      R := 0;
      while (R < D1) or (R > D2) do
        R := random(10000) / 10000;
    end;
      

  2.   

    你可以按以下步骤来取到所需的随机时间:
    1。将hh:mm:ss(时分秒)格式表示的时间转换为仅用s(秒)表示的时间:
        s=(hh*24+mm)*60+ss
    2。利用上述公式,将07:58:28 与 08:03:57都转换为秒表示的时间:s1,s2
    3。你要的随即时间,用秒表示的,为: s:=s1+random(s2+1)
    4。你要的用hh:mm:ss(时分秒)的随即时间为:
        ss:=s mod 60;
        mm:=(s-ss) div 60
        hh:=(s-ss-mm*60) div 24
    5。将ss,mm,hh三各个数,用inttostr函数转换成字符串,再中间插入冒号就完成了整个。[注]这是苯办法,在windows的API中,可能有将hh:mm:ss(时分秒)格式时间转换为s(秒)时间,或进行反向转换,的现成函数可用。Delphi中,有关日期(date)和时间(time)也有许多函数,你可用help去查,看是否有更方便的工具。