Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   UnixToDateTime (https://www.delphipraxis.net/184430-unixtodatetime.html)

user0815 26. Mär 2015 09:36

UnixToDateTime
 
Hallo,
ich habe jetzt einige Beiträge gelesen, aber nichts gefunden was mir wirklich hilft.
Ich habe in einer MySQL DB das folgende Datum "26.03.2015 - 09:51:00" als UnixTime gespeichert: "1427359860".

Online Umrechner: http://www.unixtime.de/

Wenn ich den Wert jetzt mit dem Programm auslese "1427359860" und umrechne http://docwiki.embarcadero.com/Libra...UnixToDateTime
dann erhalte ich eine Std. Versatz.

Delphi-Quellcode:
  dt : TDateTime;
begin
  dt := DateUtils.UnixToDateTime(1427359860);
  ShowMessage('Realzeit: 26.03.2015 - 09:51:00 <> ' + FormatDateTime('dd.mm.yyyy hh:nn:ss', dt));

// Ausgabe = Realzeit: 26.03.2015 - 09:51:00 <> 26.03.2015 08:51:00
Ist da immer eine Std. Versatz oder hat das mit der Zeitzone zu tun in der die EXE läuft ?
Eigentlich ja schon Quatsch das da überhaupt was verkehrtes rauskommt... sollte ja immer "die Anzahl der vergangenen Sekunden seit dem 1.1.1970 um 00:00" sein

Klaus01 26. Mär 2015 09:42

AW: UnixToDateTime
 
Hallo,

hilft der SO Eintrag weiter?

Grüße
Klaus

Der schöne Günther 26. Mär 2015 09:47

AW: UnixToDateTime
 
Toll, jetzt hatte ich extra was getippt und Klaus war schneller. Jetzt schicke ich es trotzdem ab :x

Delphi-Quellcode:
procedure justUnixTimeThings();
const
   unixTime = 1427359860;
var
   dateTime: TDateTime;
begin
   dateTime := System.DateUtils.UnixToDateTime(unixTime);
   Write('Unix timestamp converted to UTC: ');
   WriteLn( DateTimeToStr(dateTime) );

   Write('Converted to local timezone: ');

   dateTime := TTimeZone.Local.ToLocalTime(dateTime);
   WriteLn( DateTimeToStr(dateTime) );
end;
PS:
Delphi-Quellcode:
UnixToDateTime
hat bei mir noch einen optionalen zweiten Parameter
Delphi-Quellcode:
AReturnUTC: Boolean
aber das gab es in XE2 noch nicht. Damit hätte man sich die Zeitzonen-Umwandlung direkt sparen können.

himitsu 26. Mär 2015 09:58

AW: UnixToDateTime
 
Wem ist der zweite Parameter bei UnixToDateTime aufgefallen?
Vorallem das True-Default. :roll:

(nicht im Lazarus)

DeddyH 26. Mär 2015 10:14

AW: UnixToDateTime
 
Das Postscriptum von Günther nicht gelesen?

user0815 26. Mär 2015 10:18

AW: UnixToDateTime
 
Delphi-Quellcode:
const
  UnixTime = 1427359860;
var
  dt : TDateTime;
begin
  dt := EncodeDateTime(1970, 1, 1, 0, 0, 0, 0);
  dt := IncSecond(dt, UnixTime);
  Memo1.Lines.Append(DateTimeToStr(dt)); // 26.03.2015 08:51:00 ???

  // @Der schöne Günther, passt
  dt := TTimeZone.Local.ToLocalTime(DateUtils.UnixToDateTime(UnixTime));
  Memo1.Lines.Append(DateTimeToStr(dt)); // 26.03.2015 09:51:00 = ok
alles komisch...

himitsu 26. Mär 2015 10:40

AW: UnixToDateTime
 
Wo ich anfing mit schreiben, war der noch nicht da und die faule RedBox hat auch kein Wort gesagt. :stupid:



Bugfix kaufen? Wurde mit XE6 repariert eingeführt.
http://docwiki.embarcadero.com/Libra...UnixToDateTime


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