AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unix-Time in TDateTime convertieren

Ein Thema von theomega · begonnen am 19. Sep 2002 · letzter Beitrag vom 19. Sep 2002
Antwort Antwort
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#1

Unix-Time in TDateTime convertieren

  Alt 19. Sep 2002, 17:07
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2
  Alt 19. Sep 2002, 17:09
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.
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#3
  Alt 19. Sep 2002, 17:19
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:
function form_date($time, $verbose = 1)
{
      return date("d.m.Y, H:i", $time) . " Uhr";
}
oder auch eine Dlephi-Funktion hätte ich anzubieten, leider funzt die nur auf den Tag genau:
Code:
Function UnixIntToPcInt(Time:UnixTime):TDateTime;
Begin
  Result := Time / 86400 + 25569;
End;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 19. Sep 2002, 17:59
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#5
  Alt 19. Sep 2002, 18:12
Werde aus der Sache garnicht schlau: in welcher Unit (DLL) ist die Funktion deklariert? Und was tut die überhaupt?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6
  Alt 19. Sep 2002, 18:34
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:
function DateTimetoUNIX(zeit: TDateTime): Longint;
const UnixDateDelta=25569;
begin
  Result:=Round(((zeit-UnixDateDelta)*24*60*60)-7200.5);
end;
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?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#7
  Alt 19. Sep 2002, 19:49
Chewie: ich suchte aber leider eine Funktion in die andere Richtug:
UnixTime -> TDateTime.
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#8
  Alt 19. Sep 2002, 19:53
habe gerade folgendes versucht: funzt leider nicht
Code:
function UnixtoDateTime(zeit:longint):TDateTime;
const UnixDateDelta=25569;
var t:TDatetime;
begin;
t:=((zeit+UnixDateDelta)/24/60/60)+7200.5;
result := t;
end;
ich habe einfach versucht die Funktion umzudrehen.
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#9
  Alt 19. Sep 2002, 19:57
Habe es hibekommen: diese funktion funzt:
Code:
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;
könnte mir nur einer Sagen, was der zweite Parameter soll?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#10
  Alt 19. Sep 2002, 21:29
Zitat von theomega:
Chewie: ich suchte aber leider eine Funktion in die andere Richtug:
UnixTime -> TDateTime.
Ups, da hat wohl jemand nicht genau gelesen
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz