Um ehrlich zu sein verstehe ich immer noch nicht das Problem des TE. Ich sortiere seit Jahren Listen, auch mit Daten und Zeiten, und hab keine Probleme. Das Problem ist weniger TDateTime als der Glaube es irgendwie machen zu müssen.
Hier ein Beispiel mit 10k Daten (also 100.000). Es werden Daten zufällig erzeugt und dann sortiert. Um diese Menge zu sortieren benötigt mein sechs Jahre alte Rechner 120 ms. Wo ist also das Problem?
Delphi-Quellcode:
uses
Contnrs, DateUtils;
type
TTest = class
DateTime: TDateTime;
end;
var
ol: TObjectList;
procedure TForm1.Button1Click(Sender: TObject);
const
MsMax = 24 * 60 * 60 * 1000;
var
t: TTime;
i: Integer;
Test: TTest;
function CompareDT(Item1, Item2: Pointer): Integer;
begin
Result := CompareDateTime(TTest(Item1).DateTime, TTest(Item2).DateTime);
end;
begin
t := Now;
ol.Clear;
for i := 1 to 100000 do //10k Daten erzeugen
begin
Test := TTest.Create;
Test.DateTime := Random(Trunc(Now)) + (Random(MsMax) / MsMax); //Zufälliges TDateTime
ol.Add(Test);
end;
ol.Sort(@CompareDT);
with ListView1 do
begin
OwnerData := True;
ViewStyle := vsReport; //1 Column erstellen, breite 150 Pixel
OwnerData := True;
Items.Count := ol.Count;
end;
ShowMessage('Dauer: ' + IntToStr(MilliSecondsBetween(t, Now)) + 'ms');
end;
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
var
Test: TTest;
begin
Test := TTest(ol.Items[Item.Index]);
Item.Caption := FormatDateTime('dd.MM.yyyy hh:nn:ss', Test.DateTime);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ol := TObjectList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ol.Free;
end;