Delphi:DateTimeToStr输出零时间(午夜)

Key*_*erS 3 delphi

我在这里找到了类似的问题,但它与我想要做的事情无关.我已经在互联网上做了很多研究,我已经确定Delphi正在按设计或预期工作,如果时间为零则省略时间.我有一个应用程序在列表视图中显示日期和时间,当时间是午夜时,它不显示00:00:00,因此使结果看起来不均匀且不合适.

我已经解决了这个仍然是locale独立的方式是添加一个微秒的时间,请参阅示例代码:

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.
Run Code Online (Sandbox Code Playgroud)

以后的输出:

02/12/2020
02/12/2020 00:00:00
Run Code Online (Sandbox Code Playgroud)

问题是 - 是否有更好的,更编程的正确方法来实现这一目标?

运行Delphi XE6

Dal*_*kar 9

您可以使用FormatDateTime函数来更好地控制日期时间格式.

FormatDateTime('ddddd tt', 44167, TFormatSettings.Create);
Run Code Online (Sandbox Code Playgroud)

注意:不需要TFormatSettings.Create(GetThreadLocale)使用locale参数调用,因为普通TFormattSettings.Create调用将GetThreadLocale在Windows平台上内部使用.