Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Problem mit DateTimeToStr (https://www.delphipraxis.net/179557-problem-mit-datetimetostr.html)

d7user1 15. Mär 2014 21:22


Problem mit DateTimeToStr
 
hallo, ich rackere mich momentan ab einen fehler zu finden, ich finde ihn aber nicht.

ich hole mir aus dem internet das letzte änderungsdatum einer datei. die übertragung funktioniert und das ergebins ist das folgende:

Timestamp: 1394916584
Lokalzeit: 15.03.2014 21:49:44
UTC / GMT: 15.03.2014 20:49:44
(quelle: http://www.gaijin.at/olsutc.php)

wenn ich mit delphi
Delphi-Quellcode:
var MeinTimeStamp: Int64; {* ... *} DateTimeToStr(UnixToDateTime(MeinTimeStamp))
verwende, bekomme ich IMMER die UTC / GMT-Zeit
und meine uhrzeit zeigt somit immer eine stunde "früher" an. wie kann ich das ändern?

Popov 15. Mär 2014 21:30

AW: Problem mit DateTimeToStr
 
Such dir evtl. etwas aus der Funktion heraus:
Delphi-Quellcode:
function FileTimeToDateTime(AFileTime: Windows.TFileTime): TDateTime;
var
  ModifiedTime: Windows.TFileTime;
  SystemTime: Windows.TSystemTime;
begin
  try
    FileTimeToLocalFileTime(AFileTime, ModifiedTime);
    FileTimeToSystemTime(ModifiedTime, SystemTime);
    Result := SystemTimeToDateTime(SystemTime);
  except
    Result := 0;
  end;
end;

d7user1 15. Mär 2014 21:53

AW: Problem mit DateTimeToStr
 
danke für diesen tipp. aber leider weiß ich nicht wie ich den anwenden kann. mein TimeStamp liegt im Int64-Format vor. ich speichere den einfach nur als Int ab.

wie konvertiere ich den denn, damit der in eine TFileTime-Variable passt?

d7user1 15. Mär 2014 22:15

AW: Problem mit DateTimeToStr
 
letztendlich lasse ich meinen code einfach so..

ich verstehe eh nichts von lokal, utc usw.

Popov 15. Mär 2014 22:39

AW: Problem mit DateTimeToStr
 
FileTimeToLocalFileTime konvertiert eine UTC-Dateizeit (64-Bit) in lokale Dateizeit. Für Deutschland ist die lokale Zeit (im Winter) UTC +1 Stunde.

FileTimeToSystemTime konvertiert eine Dateizeit (64-Bit) in eine WIN32-API Systemzeit.

SystemTimeToDateTime konvertiert eine WIN32-API Systemzeit in Delphi TDateTime-Zeit.


EDIT:

Stell dir vor du gehst morgens ins Büro und erstellst um 9 Uhr auf deinem Laptop eine Datei. Präsident Obama geht 5 Stunden später in sein Oval Office und erstellt auf seinem Laptop auch eine Datei. Nun werden 5 Jahre später die Dateien verglichen und man stellt fest, dass du in Deutschland und Obama in Amerika zu gleichen Zeit eine Datei erstellt habt, obwohl da 5 Stunden dazwischen liegen. Das würde die ganze Relativitätstheorie durcheinander bringen.

Damit das nicht passiert, werden (zumindest habe ich das so verstanden) in den Zeiten intern die Zeitzonen berücksichtigt. Kommt Obama nun nach Deutschland und stellt seinem Laptop auf die Lokalzeit um, wird man feststellen, dass er seine Datei nach deutscher Zeit um 14 Uhr erstellt hat. Je nachdem, wo du nun mit dem Rechner bist, brauchst du also nur die Zeitzone neu einstellen, und schon wird die Zeit angepasst. Denn 9:00 Uhr in Deutschland ist nicht die gleiche Zeit wie 9:00 Uhr in NY.

d7user1 15. Mär 2014 23:04

AW: Problem mit DateTimeToStr
 
ich bin mir nicht sicher ob ich das verstanden habe.

ich habe meinem timestamp der aus dem internet kommt nun "1 * 60 * 60" sekunden (1 = aktuelle Zeitzone) hinzugefügt. das ergibt eine stunde.

das ergebnis ist korrekt, aber ist das so ok?

Popov 15. Mär 2014 23:26

AW: Problem mit DateTimeToStr
 
Vielleicht habe ich die Erklärung zu ironisch geschrieben. Am besten liest du dir den Artikel durch: Koordinierte Weltzeit.


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