![]() |
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. |
AW: Timestamp Unix in TDateTime Anzeigen
Delphi-Quellcode:
ergibt 18.02.2013 14:15:00
procedure TForm1.Button1Click(Sender: TObject);
var dateTime: TDateTime; begin dateTime := unixToDateTime(1361196900); showMessage(dateTimeToStr(dateTime)); end; Edit: Eine Konvertierung mit dem Webtool ergibt: Realzeit: 18.02.2013 - 15:15:00 Wodurch die 1h Abweichung entsteht .. ? Grüße Klaus |
AW: Timestamp Unix in TDateTime Anzeigen
Zitat:
![]() |
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:
Aber komme einfach nicht weiter, wer hat für mich einen Lösungsvorschlag?
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; |
AW: Timestamp Unix in TDateTime Anzeigen
Immer noch denselben: konvertiere doch gleich in der Abfrage.
|
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ß :-) |
AW: Timestamp Unix in TDateTime Anzeigen
Wie sieht denn Deine Abfrage aus?
[edit] Oder anders ausgedrückt: was kommt hierbei heraus?
SQL-Code:
[/edit]
SELECT
FROM_UNIXTIME(Timestampfeld, '%d.%m.%Y %H:%i:%s') AS Datum FROM Tabelle |
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:
Wenn wir jetzt wissen, dass die Funktionen korrekt sind, dann gibt es nur noch wenige Fehlermöglichkeiten:
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 * 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. |
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