![]() |
Unix-Time in TDateTime convertieren
Hallo
ich habe aus einem Forum einen Wert in UnixTime. Diese will ich jetzt in einen TDateTime wert umwandeln. Dabei geht es mir nichtnur um das Datum, sonders auch um die Uhrzeit. Weiß jemand wie das geht? Danke TO |
Wie ist den der Wert unter UNIX aufgebaut. Dann müsste man den doch recht leicht ermitteln können. Mit welchem Wert korrespondiert 0 unter UNIX, ich glaube 1.1.1970.
|
Mal ein Paar Beispiele:
17.09.2002, 13:41 Uhr => 1032262863 17.09.2002, 17:55 Uhr => 1032278130 29.08.2002, 12:05 Uhr => 1030615518 17.09.2002, 17:46 Uhr => 1032277564 Reciht das, oder brauchst du noch mehr? Order hilft diese Funktion: leider PHP
Code:
oder auch eine Dlephi-Funktion hätte ich anzubieten, leider funzt die nur auf den Tag genau:
function form_date($time, $verbose = 1)
{ return date("d.m.Y, H:i", $time) . " Uhr"; }
Code:
Function UnixIntToPcInt(Time:UnixTime):TDateTime;
Begin Result := Time / 86400 + 25569; End; |
Moin The Omega,
schau Dir doch mal die API Int32x32To64 an, sowie das Beispiel (Converting a time_t Value to a File Time) auf das dort verwiesen wird. |
Werde aus der Sache garnicht schlau: in welcher Unit (DLL) ist die Funktion deklariert? Und was tut die überhaupt?
|
Ich nehm an, du meinst die UNIX-Zeit, die seit dem 1.1.1970 die Sekunden zählt. Die, die man mit der PHP-Funktion time() ermittelt.
Die gleiche Funktion brauchte ich auch einmal und hab sie mir selber geschrieben. Leider hat sie einen fehler von etwa 0,1 s. Also in etwa 10% aller Fälle liegt sie eine Sekunde falsch. Aber ich such die Funktion gleich mal raus und schreib noch was dazu. So, hier ist sie:
Code:
Wenn man Delphi6 > hat, braucht man die Konstantendeklaration nicht. Die Funktion rechnet anhand der Konstante die Tage, dann die Stunden, dann die Minuten und schließlich die Sekunden aus, die seit dem 1.1.1970 vergangen sind. Die Subtraktion von 7200.5 am Ende kommt daher, dass der Code am Anfang einen falschen Wert lieferte und ich dann gesehen hab, dass es etwa 7200 s waren. Das hat dann auch nicht so ganz gestimmt. Dann hab ich gleichzeitig PHP-Scripts und die Funktion im Delphi-Programm ausgeführt und die Werte verglichen, solange, bis ich was gescheites gefunden hab. Ich hab dann die ,5 genommen, das stimmt im Großen und Ganzen überein. Aber da mir keine einfache Möglichkeit einfiel, PHP und Delphi gleichzeitig zu testen, ist dieses Ergebnis nicht 100%ig genau (wie oben beschrieben). Vielleicht weiß jemand, warum ich noch die 7200 Sekunden und ein paar Zerquetschte abzeiehen muss, um zum richtigen Ergebnis zu kommen?
function DateTimetoUNIX(zeit: TDateTime): Longint;
const UnixDateDelta=25569; begin Result:=Round(((zeit-UnixDateDelta)*24*60*60)-7200.5); end; |
Chewie: ich suchte aber leider eine Funktion in die andere Richtug:
UnixTime -> TDateTime. |
habe gerade folgendes versucht: funzt leider nicht
Code:
ich habe einfach versucht die Funktion umzudrehen.
function UnixtoDateTime(zeit:longint):TDateTime;
const UnixDateDelta=25569; var t:TDatetime; begin; t:=((zeit+UnixDateDelta)/24/60/60)+7200.5; result := t; end; |
Habe es hibekommen: diese funktion funzt:
Code:
könnte mir nur einer Sagen, was der zweite Parameter soll?
function UnixtoDateTime(UnixTime: Double; UTC: Boolean): TDateTime;
var SysTime, TmpSysTime: TSystemTime; DTime: TDateTime; FTime, LTime: TFileTime; begin DTime := (UnixTime / (24 * 3600)) + EncodeDate(1970, 1, 1); if UTC = true then result := DTime else begin DateTimeToSystemTime(DTime, TmpSysTime); SystemTimeToFileTime(TmpSysTime, FTime); FileTimeToLocalFileTime(FTime, LTime); FileTimeToSystemTime(LTime, SysTime); result := SystemTimeToDateTime(sysTime); end; end; |
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 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