Delphi の TDateTime 型へマイクロ秒を入れて、取り出す

Delphi の TDateTime 型へマイクロ秒を入れて、取り出す

基本的な事ですが TDateTime型は、整数部が日付(1899/12/30からの経過)、小数部が時刻(24時間を1とする)の Double 型
なので、マイクロ秒は 1/1,000,000 秒を加算すればOK

EncodeTime の マイクロ秒版
function EncodeTimeMicroSec(const AHour, AMin, ASec: Word; const AMicroSec: Cardinal): TDateTime;
begin
    Result := EncodeTime(AHour, AMin, ASec, 0) + ((1/(60*60*24)) * AMicroSec / 1000000);
end;

TDateTime をマイクロ秒表示
function DateTimeToStrMicroSec(ADateTime: TDateTime): string;
var Time: TTime;
    subSec: Extended;
begin
    Result := FormatDateTime('yyyy-mm-dd hh:nn:ss', ADateTime);
    Time := Frac(ADateTime); // 時刻(小数部)のみ
    subSec := Frac(Time * 60 * 60 * 24); // 秒未満(小数部)のみ => 0.123456****
    Result := Result + '.' + Copy(FloatToStr(subSec), 3, 6);
end;

使ってみる
procedure Form1.Button1Click(Sender: TObject);
	var microDateTime: TDateTime;
begin
    microDateTime := EncodeDate(2020, 6, 24) + EncodeTimeMicroSec(11, 34, 6, 123456);
    Caption := DateTimeToStrMicroSec(microDateTime);
end;

コメント