Ich habe eine ähnliche Frage here gefunden, aber es hat nichts damit zu tun, was ich versuche zu tun. Ich habe viel im Internet recherchiert und festgestellt, dass Delphi so funktioniert, wie es geplant oder geplant ist, wobei die Zeit ausgelassen wird, wenn die Zeit Null ist. Ich habe eine Anwendung, die das Datum & Zeit in einer ListView anzeigt, und wenn die Zeit Mitternacht ist, zeigt es nicht 00:00:00, und daher die Ergebnisse ungleich und fehl am Platz zu machen.Delphi: DateTimeToStr Ausgabe mit Null Zeit (Mitternacht)
Die Art, wie ich um diese bekommen haben, die noch locale unabhängig ist, ist eine Mikrosekunde bis zu dem Zeitpunkt an, Beispielcode siehe:
program Test11;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, Winapi.Windows;
begin
try
Writeln(DateTimeToStr(44167, TFormatSettings.Create(GetThreadLocale)));
Writeln(DateTimeToStr(44167.00000001, TFormatSettings.Create(GetThreadLocale)));
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
und nachfolgende Ausgabe:
02/12/2020
02/12/2020 00:00:00
Die Frage Ist - gibt es einen besseren, programmatischeren Weg, dies zu erreichen?
Lauf Delphi XE6
@nolaspeaker - das impliziert dann ein Gebietsschema - ich brauche meine Anwendung, um unabhängig zu sein. – KeyszerS
@nolaspeaker - Ich schätze die zusätzlichen Kommentare, aber ich habe die Antwort unten akzeptiert. hh: nn: ss.zzz gibt immer noch ein Gebietsschema-Format an. Beispiel: Das Gebietsschema en-us zeigt Mitternacht als 12:00:00 Uhr an - was Ihr Beispiel nicht ausgegeben hätte. – KeyszerS
FWIW können Sie einfach 'TFormatSettings.Create' aufrufen, ruft intern' GetThreadLocale' auf Windows auf - Bonus-Effekt: plattformübergreifende Kompatibilität –