Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Timestamp Unix in TDateTime Anzeigen (https://www.delphipraxis.net/173355-timestamp-unix-tdatetime-anzeigen.html)

Alterauge 20. Feb 2013 09:33

AW: Timestamp Unix in TDateTime Anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

siehe Anhang Bild3 das DBGrid mit Timestamp.
Die Daten kommen aus einer MySQL DB.

Klaus01 20. Feb 2013 09:45

AW: Timestamp Unix in TDateTime Anzeigen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  dateTime: TDateTime;
begin
  dateTime := unixToDateTime(1361196900);
  showMessage(dateTimeToStr(dateTime));
end;
ergibt 18.02.2013 14:15:00

Edit: Eine Konvertierung mit dem Webtool ergibt: Realzeit: 18.02.2013 - 15:15:00
Wodurch die 1h Abweichung entsteht .. ?

Grüße
Klaus

DeddyH 20. Feb 2013 09:50

AW: Timestamp Unix in TDateTime Anzeigen
 
Zitat:

Zitat von DeddyH (Beitrag 1204385)
Kann man da nicht auf Feldebene ansetzen? Also entweder schon in der SQL-Abfrage casten

https://dev.mysql.com/doc/refman/5.5..._from-unixtime

Alterauge 4. Mär 2013 17:16

AW: Timestamp Unix in TDateTime Anzeigen
 
Hallo,
hier jetzt das Rroblem richtig beschrieben.

Greife mit einem CRDBGrid auf eine mySQL DB zu.
Im CRDBGrid wird in der Zeile Timestamp das UnixDateTime format angezeigt!

Dieses möchte ich gerne ändern in das FormatDateTime.
Habe mir folgendes überlegt:

Delphi-Quellcode:
procedure TForm1.CRDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  i : Integer;
  Wert: string;
  d: TDateTime;
begin
   if (CRDBGrid1.DataSource.DataSet.RecordCount = 0) then
     Exit;
  Wert := CRDBGrid1.DataSource.DataSet.FieldByName('Timestamp').Value;
  d:= UnixToDateTime(i);
  Label3.Caption := FormatDateTime('dd/mm/yy hh:nn:ss', d);
  //CRDBGrid1.Canvas.TextRect(Rect, Label3.Caption);
  CRDBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Aber komme einfach nicht weiter, wer hat für mich einen Lösungsvorschlag?

DeddyH 4. Mär 2013 17:18

AW: Timestamp Unix in TDateTime Anzeigen
 
Immer noch denselben: konvertiere doch gleich in der Abfrage.

Alterauge 4. Mär 2013 17:23

AW: Timestamp Unix in TDateTime Anzeigen
 
DeddyH,

glaube es mir bin schon die ganze Woche am testen und am schreiben!
Zeig mir bitte wie!
Habe glaube alles was im Netz steht ausprobiert, ohne Erfolg!

Gruß :-)

DeddyH 4. Mär 2013 17:24

AW: Timestamp Unix in TDateTime Anzeigen
 
Wie sieht denn Deine Abfrage aus?

[edit] Oder anders ausgedrückt: was kommt hierbei heraus?
SQL-Code:
SELECT
  FROM_UNIXTIME(Timestampfeld, '%d.%m.%Y %H:%i:%s') AS Datum
FROM
  Tabelle
[/edit]

sx2008 4. Mär 2013 18:34

AW: Timestamp Unix in TDateTime Anzeigen
 
Also ich sehe das so:
Es gibt 2 Zeitsysteme: Unix (Sekunden seit dem 1. Januar 1970 (00:00 Uhr)) und Delphi (Anzahl Tage seit 31.12.1899).
Und es gibt sicher die Möglichkeit beide Zeitsysteme ineinander umzurechnen (wenn man >= 1970 bleibt).
Also muss man im ersten Schritt sich die beiden Umrechnungsfunktionen besorgen und überprüfen!
Am Besten man verwendet Funktionen aus der RTL/VCL und wenn es die dort noch nicht gibt,
muss man sich eben was besorgen (Jedi Code Library) oder selbst bauen.

Die Funktionen müssen umkehrbar sein, was man leicht testen kann:
Delphi-Quellcode:
heute := SysUtils.Date;
if Int(heute) <> Int(UnixToDateTime(DateTimeToUnix(heute))) then
   ShowMessage('Houston wir haben ein Problem');

if 9876000 <> DateTimeToUnix(UnixToDateTime(9876000)) then
   ShowMessage('Houston wir haben noch''n ein Problem');

ShowMessage(DateTimeToStr(UnixToDateTime(0))); // muss logischerweise der 1.1.1970 sein
Wenn wir jetzt wissen, dass die Funktionen korrekt sind, dann gibt es nur noch wenige Fehlermöglichkeiten:
* Werte in Datenbank sind falsch oder nicht im Unix-Format
* Werte werden falsch ausgelesen (aufbassen Int64)
* Code ist falsch und Alterauge hat den Tomaten-Auf-Den-Augen-Effekt vergessen
(und wenn mich nicht alles täuscht liegt genau hier der Fehler. Der Compiler gibt Warnungen aus wenn Variablen nicht initialisiert wurden!!)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 Uhr.
Seite 2 von 2     12   

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