我试图在delphi 5中生成给定范围内的随机Tdatetime值假设我们有以下格式的两个日期
date1 = 01/01/201 12:35:32date2 = 05/01/201 21:35:32我想生成……
生成随机函数 TDateTime 两个固定值之间的值可以这样写( uses DateUtils ):
TDateTime
uses DateUtils
function RandomDateTime(const AFrom, ATo: TDateTime): TDateTime; var SecsBetween: Int64; begin SecsBetween := SecondsBetween(AFrom, ATo); result := IncSecond(AFrom, Round(SecsBetween * Random)); end;
要创建这些的排序列表,请使用您喜欢的排序方法。在现代Delphi中,您可以使用内置的通用列表:
function CreateSortedListOfRandomDatetimes(const AFrom, ATo: TDateTime; N: integer): TList<TDateTime>; var i: Integer; begin result := TList<TDateTime>.Create; try result.Capacity := N; // for an unnoticeable increase in performance for i := 1 to N do result.Add(RandomDateTime(AFrom, ATo)); result.Sort; except result.Free; raise; end; end;
试试看:
procedure TForm1.FormCreate(Sender: TObject); var timestamps: TList<TDateTime>; i: Integer; begin timestamps := CreateSortedListOfRandomDatetimes( EncodeDateTime(2000, 1, 1, 0, 0, 0, 0), EncodeDateTime(2000, 12, 31, 23, 59, 59, 999), 10 ); try RichEdit1.Lines.BeginUpdate; try RichEdit1.Lines.Clear; for i := 0 to timestamps.Count - 1 do RichEdit1.Lines.Add(DateTimeToStr(timestamps[i])) finally RichEdit1.Lines.EndUpdate; end; finally timestamps.Free; end; end;
(这种方法可能会产生重复的日期时间.Q没有明确提到是否允许这样。而且,它只能以第二精度工作,而不是毫秒精度。你可能想要改变它,或者至少从毫秒中删除毫秒 AFrom 。)
AFrom