Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Wie Delphi TDateTime zu c++ Datetime Ticks konvertieren?

  Alt 15. Mai 2017, 14:44
Hallo jus,

die fiskaltrust-Doku zeigt immer C#-Code. Das ist kein Visual C++.

Anbei noch zwei verschiedene Funktion zur Erzeugung von Ticks.
Welche "besser" ist sei mal dahingestellt.
Die minus Eins ist wegen dem Offset von TTimeStamp.Date (http://docwiki.embarcadero.com/Libra...ils.TTimeStamp)

Delphi-Quellcode:
program ConvertDateTimeToTicksProject;

{$APPTYPE CONSOLE}

{$R *.res}


uses
  System.SysUtils,
  System.TimeSpan;

function ConvertTimeStampToMilliSeconds(const ATimeStamp: TTimeStamp): Int64;
begin
  Result := ATimeStamp.Date - 1;
  Result := (Result * MSecsPerDay) + ATimeStamp.Time;
end;

function ConvertDateTimeToTicks(const ADateTime: TDateTime): Int64;
var
  TimeStamp: TTimeStamp;
  TimeStampInMilliseconds: Int64;
begin
  TimeStamp := DateTimeToTimeStamp(ADateTime);
  TimeStampInMilliseconds := ConvertTimeStampToMilliSeconds(TimeStamp);
  Result := TimeStampInMilliseconds * TTimeSpan.TicksPerMillisecond;
end;

function ConvertDateTimeToTicksEx(const ADateTime: TDateTime): Int64;
var
  TimeSpan: TTimeSpan;
  LHour, LMinute, LSecond, LMilliSecond: Word;
  LDays: Integer;
begin
  LDays := DateTimeToTimeStamp(ADateTime).Date - 1;
  DecodeTime(ADateTime, LHour, LMinute, LSecond, LMilliSecond);
  TimeSpan := TTimeSpan.Create(LDays, LHour, LMinute, LSecond, LMilliSecond);
  Result := TimeSpan.Ticks;
end;

procedure Main;
var
  MyDateTime: TDateTime;
begin
  MyDateTime := System.SysUtils.Now;
  Writeln(FormatDateTime('hh:nn:ss:zzz - dd.mm.yyyy', MyDateTime));
  Writeln(ConvertDateTimeToTicks(MyDateTime));

  MyDateTime := StrToDateTime('01.04.2017 00:00:01');
  Writeln(FormatDateTime('hh:nn:ss:zzz - dd.mm.yyyy', MyDateTime));
  Writeln(ConvertDateTimeToTicks(MyDateTime));

  MyDateTime := StrToDateTime('29.02.2020 12:00:00');
  Writeln(FormatDateTime('hh:nn:ss:zzz - dd.mm.yyyy', MyDateTime));
  Writeln(ConvertDateTimeToTicks(MyDateTime));

  /// //////////////////////////////////////////////////////////////

  MyDateTime := System.SysUtils.Now;
  Writeln(FormatDateTime('hh:nn:ss:zzz - dd.mm.yyyy', MyDateTime));
  Writeln(ConvertDateTimeToTicksEx(MyDateTime));

  MyDateTime := StrToDateTime('01.04.2017 00:00:01');
  Writeln(FormatDateTime('hh:nn:ss:zzz - dd.mm.yyyy', MyDateTime));
  Writeln(ConvertDateTimeToTicksEx(MyDateTime));

  MyDateTime := StrToDateTime('29.02.2020 12:00:00');
  Writeln(FormatDateTime('hh:nn:ss:zzz - dd.mm.yyyy', MyDateTime));
  Writeln(ConvertDateTimeToTicksEx(MyDateTime));
end;

begin
  try
    Main;
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.
  Mit Zitat antworten Zitat