![]() |
Timestamp Unix in TDateTime Anzeigen
Hallo,
habe ein CRDBGrid wo der Zeitstempel in Timestamp Unix angezeigt wird. Möchte aber im CRDBGrid1 die Zeit lesen können, also TDateTime Format! Wie mache ich das? |
AW: Timestamp Unix in TDateTime Anzeigen
.. konvertieren
Zitat:
Klaus |
AW: Timestamp Unix in TDateTime Anzeigen
Habe es so versucht! Kein Erfolg!
Delphi-Quellcode:
function UnixToDateTime(const AValue: Int64): TDateTime;
begin Result := (UnixToDateTime / 86400) + 25569; end; |
AW: Timestamp Unix in TDateTime Anzeigen
Und was soll das werden?
|
AW: Timestamp Unix in TDateTime Anzeigen
Hallo DeddyH,
habe selber noch keine Ahnung! Bin noch Ahnungslos am googeln, aber ohne Erfolg. Timestamp Unix ist was ganz neues für mich! |
AW: Timestamp Unix in TDateTime Anzeigen
Wieso nutzt Du denn nicht die von Klaus vorgeschlagene Routine
![]() |
AW: Timestamp Unix in TDateTime Anzeigen
Der Vorschlag von Klaus ist bestimmt gut!
Komme da aber nicht weiter, habe es noch nicht verstanden! Da ist die Funktion vorgegeben, brauche aber bestimmt noch eine Procedure fürs Grid oder nicht? Habe bestimmt gerade wieder ein Brett vorm Kopf! So sind die Anfänger halt! :-) |
AW: Timestamp Unix in TDateTime Anzeigen
Kann man da nicht auf Feldebene ansetzen? Also entweder schon in der SQL-Abfrage casten oder wenn das nicht geht, im OnGetText des Feldes umwandeln. Das fällt mir zumindest als Erstes ein.
|
AW: Timestamp Unix in TDateTime Anzeigen
Ok,Danke dür Deinen Hinweis!
Versuche mal mein Glück! |
AW: Timestamp Unix in TDateTime Anzeigen
Guten Morgen,
kannst Du mal einen Timestamp hier einstellen? Kann es sein, dass der Timestamp noch Millisekunden enthält? Kannst Du den Timestamp hier ( ![]() Grüße Klaus |
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 14:39 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