Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Unix Timestamp (https://www.delphipraxis.net/43077-unix-timestamp.html)

horst 28. Mär 2005 19:59


Unix Timestamp
 
Wenn ich die Uhrzeit 19:45h per DateTimeToUnix umwandel, bekomme ich auf dem Server 21:45h angezeigt, jemand eine Ahnung warum?

Delphi-Quellcode:
const
  // Sets UnixStartDate to TDateTime of 01/01/1970 
  UnixStartDate: TDateTime = 25569.0;

function DateTimeToUnix(ConvDate: TDateTime): Longint;
begin
  //example: DateTimeToUnix(now);
  Result := Round((ConvDate - UnixStartDate) * 86400);
  form1.edit17.text:=inttostr(Result);
end;
//DateTimeToUnix(now);
Kann das am Server liegen oder am Script?

Grüße
Horst

Mephistopheles 28. Mär 2005 20:19

Re: Unix Timestamp
 
Wenn der Server in Dtl. steht, dann ist er GMT+1+DST (DST = +1)

Also stimmt die Ausgabe ... jetzt mußt du entsprechend der Richtung in die du konvertierst, entweder vor oder nach der Abfrage in oder von GMT von oder nach Lokalzeit konvertieren.

Ich vergaß: DST = Daylight Saving Time (auch als Sommerzeit bekannt).

horst 28. Mär 2005 20:38

Re: Unix Timestamp
 
Aha...hmm, wie muss ich das nun machen, ich versteh das grad nicht ganz.
DST = Daylight Saving Time, ich habe hier schon die Sommerzeit.

Pr0g 28. Mär 2005 20:43

Re: Unix Timestamp
 
Warum hast du eine eigene DateTimeToUnix Funktion gemacht? In der Unit "dateutils" gibt es schon eine fertige, kannst dazu auch mal in der OH nachsehen.

MfG Pr0g

Mephistopheles 28. Mär 2005 20:46

Re: Unix Timestamp
 
FileTimeToLocalFileTime() oder LocalFileTimeToFileTime() benutzen. Allerdings muß dazu die Zeit vorher in dem Format vorliegen, welches Windows versteht (eben FILETIME).

horst 28. Mär 2005 21:13

Re: Unix Timestamp
 
Ich habs nun raus, vielen Dank für eure Hilfe :)

moritz 28. Mär 2005 21:24

Re: Unix Timestamp
 
Wäre schön, wenn du die Lösung posten würdest, dann können auch andre davon profitieren :)

horst 28. Mär 2005 21:40

Re: Unix Timestamp
 
Gerne :)

Delphi-Quellcode:
function TimeStampHumanToUnix(const HumanStamp: tDateTime;
UseBias: boolean): cardinal;
var
iTime: integer;
hh, mm, ss, ms: word;
TZI: TTimeZoneInformation;

const
FirstOf1970 = 25569; //[s] seit 30.12.1899 bis 01.01.1970 (WinZeit -> UnixZeit)
OneDay = 86400; //in [s]
OneHour = 3600; //in [s]
OneMinute = 60; //in [s]

begin
Result := 0;

case GetTimeZoneInformation(TZI) of
$FFFFFFFF: UseBias := False;
end;

DecodeTime(HumanStamp, hh, mm, ss, ms);

{ Tage seit 1.1.1970 in Sekunden } 
iTime := (Trunc(HumanStamp) - FirstOf1970) * OneDay;
{ Stunden und Minuten und Sekunden aufaddieren } 
iTime := iTime + (hh * OneHour);
if UseBias
then iTime := iTime + ((mm + TZI.Bias + TZI.DaylightBias) * OneMinute)
else iTime := iTime + (mm * OneMinute);
iTime := iTime + ss;
if iTime < 0 then iTime := 0;
Result := iTime;

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 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