Delphi-PRAXiS

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 19. Feb 2013 15:26

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?

Klaus01 19. Feb 2013 15:30

AW: Timestamp Unix in TDateTime Anzeigen
 
.. konvertieren
Zitat:

Unit
DateUtils

Syntax


[Delphi] function UnixToDateTime(const AValue: Int64): TDateTime;

Grüße
Klaus

Alterauge 19. Feb 2013 15:40

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;

DeddyH 19. Feb 2013 17:36

AW: Timestamp Unix in TDateTime Anzeigen
 
Und was soll das werden?

Alterauge 19. Feb 2013 18:12

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!

DeddyH 19. Feb 2013 18:15

AW: Timestamp Unix in TDateTime Anzeigen
 
Wieso nutzt Du denn nicht die von Klaus vorgeschlagene Routine UnixToDateTime aus DateUtils?

Alterauge 19. Feb 2013 18:27

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! :-)

DeddyH 19. Feb 2013 18:34

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.

Alterauge 19. Feb 2013 18:37

AW: Timestamp Unix in TDateTime Anzeigen
 
Ok,Danke dür Deinen Hinweis!
Versuche mal mein Glück!

Klaus01 20. Feb 2013 09:02

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 (http://www.unixtime.de/) konvertieren?

Grüße
Klaus

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 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