![]() |
Wie Delphi TDateTime zu c++ Datetime Ticks konvertieren?
Hallo,
ich muß einem Webservice ein Datetime Tick von einem Datum übergeben. In der Webservice Doku steht folgender Visual C++ Beispielcode fürs Senden an dem Webservice:
Code:
Die Delphifunktion ist wie folgt definiert:
Journal(0x01, DateTime.Parse("2016-03-01T00:00").Ticks, DateTime.UtcNow.Ticks);
Delphi-Quellcode:
Doch wie erzeugt man in Delphi Int64 Ticks?
Journal(const ftJournalType: Int64; const from: Int64; const to_: Int64);
lg, jus |
AW: Wie Delphi TDateTime zu c++ Datetime Ticks konvertieren?
Mit C++ hat das erstmal nichts zu tun.
Was ist denn ticks, bzw. was sagt im Visual C++ die Hilfe dazu? ![]() |
AW: Wie Delphi TDateTime zu c++ Datetime Ticks konvertieren?
@himitsu:
![]() Ich habe hier aktuell kein Visual Studio. Aber laut MSDN ![]() Zitat:
lg, jus |
AW: Wie Delphi TDateTime zu c++ Datetime Ticks konvertieren?
Guckst Du hier:
![]() ![]() ![]() Weitersuchen hier: ![]() |
AW: Wie Delphi TDateTime zu c++ Datetime Ticks konvertieren?
@nahpets: Vielen Dank fürs Suchen, aber die Links kannte ich auch schon.
Der vielversprechendeste Link war der ![]() Und zwar habe ich bemerkt, dass, wenn ich direkt Delphi TDateTime mit Hilfe von der WinAPI ![]() Anbei die Lösung, vielleicht kanns wer ja mal brauchen.
Delphi-Quellcode:
Zur Probe, ob die berechneten Ticks richtig sind, kann man die Werte
procedure TForm1.Button1Click(Sender: TObject);
var SystemTime: TSystemTime; TimeTicks: UInt64; ADateTime: TDateTime; begin ADateTime := StrToDateTime('27.09.2009 22:50:27'); DateTimeToSystemTime(ADateTime, SystemTime); SystemTime.wYear := SystemTime.wYear +1600; SystemTimeToFileTime(SystemTime, TFileTime(TimeTicks)); showMessage(IntToStr(Int64(TimeTicks))); end; ![]() lg, jus |
AW: Wie Delphi TDateTime zu c++ Datetime Ticks konvertieren?
Zitat:
![]() ![]() Böse, wer sich da Schlimmes bei denkt. Sicherer ist es aber, wenn du statt den Jahren, die 100tel-Nanosekunden "nachher" drauf rechnest. Also einmal für den 1.1.1601 den Wert geben lassen und den dann verwenden. Denn es kann gern mal sein, dass Datumsfunktionen sich zickig verhalten, wenn man für ein Datum sich den Wert geben lässt, wo eventuell noch nicht die Schaltsekunden und Schaljahre festgelegt wurden, was sooooo weit in der Zukunft (24.05.3617) schon mal vorkommen könnte. Und der Wert könnte auch falsch sein, wenn bei einem der beiden Werte oder bei Beiden die Schaltsekunden und Co. mit eingerechnet sind, die so dann natürlich nicht stimmen können. |
AW: Wie Delphi TDateTime zu c++ Datetime Ticks konvertieren?
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 ( ![]()
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. |
AW: Wie Delphi TDateTime zu c++ Datetime Ticks konvertieren?
Zitat:
Zitat:
@TiGü: Vielen vielen Dank für die 2 Funktionen! Da ich immer noch Delphi 2007 verwende, kennt mein Delphi leider kein TTimeSpan, somit fällt für mich die "ConvertDateTimeToTicksEx" flach. Interessant ist aber trotzdem, dass TTimeSpan direkt in Ticks umwandeln kann. Anbei deine angepaßte ConvertDateTimeToTicks Routine, damit es in Delphi 2007 läuft:
Delphi-Quellcode:
lg,
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; Result := TimeStampInMilliseconds * 10000; end; jus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz