Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   filtetime - filetime?? (https://www.delphipraxis.net/114853-filtetime-filetime.html)

lbccaleb 1. Jun 2008 20:40


filtetime - filetime??
 
hey community,

also ich convertiere systemtime zu filetime (um damit leichter zu rechnen oder ist das schon blödsinn)

dann will ich von der filetime (aus der zukunft) die momentane filetime abziehen um quasi "verbleib" counter zu haben!
dann das ganze wieder in eine systemtime convertieren... (ich denke hier ligt dann der fehler)

kennt sich damit irgenwer aus??

oder weiß jemand wie man das bewerkstelligen kann ohne auf tfiletime zurückgreifen zu müssen also nut mit tsystemtime??

ach ja und das ganze sollte ohne dateutils sein, denn das programm soll so klein wie möglich gehalten werde!! oO

Luckie 1. Jun 2008 20:43

Re: filtetime - filetime??
 
Hilfe lesen:
Zitat:

Remarks
It is not recommended that you add and subtract values from the SYSTEMTIME structure to obtain relative times. Instead, you should

- Convert the SYSTEMTIME structure to a FILETIME structure.
- Copy the resulting FILETIME structure to a ULARGE_INTEGER structure.
- Use normal 64-bit arithmetic on the ULARGE_INTEGER value.

rollstuhlfahrer 1. Jun 2008 20:45

Re: filtetime - filetime??
 
Wie wärs, wenn du statt FileTime TDatetime nimmst?

Delphi-Quellcode:
x := EncodeTime(5, 30, 0, 0);
x := x + EncodeTime(0,30,0,0);
Caption := TimeToStr(x);
Ergebniss: 6:00 Uhr

rollstuhlfahrer

marabu 1. Jun 2008 20:48

Re: filtetime - filetime??
 
Hallo,

ein Problem entsteht, wenn du zwei FileTime-Werte voneinander abziehst: Es entsteht ein Zeitintervall. Du kannst ein Zeitintervall zwar wieder in eine SystemTime konvertieren, aber das Ergebnis macht eigentlich keinen Sinn.

Nachdenkliche Grüße

lbccaleb 1. Jun 2008 20:49

Re: filtetime - filetime??
 
Zitat:

Zitat von Luckie
Hilfe lesen:
Zitat:

Remarks
It is not recommended that you add and subtract values from the SYSTEMTIME structure to obtain relative times. Instead, you should

- Convert the SYSTEMTIME structure to a FILETIME structure.
- Copy the resulting FILETIME structure to a ULARGE_INTEGER structure.
- Use normal 64-bit arithmetic on the ULARGE_INTEGER value.

ja so hab ich es ja gemacht, nur funzt das nicht wirklich, hab mal nen code angehangen, vllt kann mir da jemand weiter helfen...

und nein, tdatetime kann ich nicht verwenden, dafür muss ich zuviele "grosse" units einbinden, kann also nur mit TSystemTime und TFileTime arbeiten...


das hab ich bisher (hardcoded nur zum test)

Delphi-Quellcode:
function GetDifferenzTime(TheTime: TSystemTime): TSystemTime;
var
  TempTime, CurrentTime: TSystemTime;
  TempFileTime, CurrentFileTime: FileTime;
  begin;
    Result := TheTime;
    GetLocalTime(CurrentTime);
    if SystemTimeToFileTime(TheTime, TempFileTime) then
      if SystemTimeToFileTime(CurrentTime, CurrentFileTime) then
        begin;
          TempFileTime := TFileTime(Int64(CurrentFileTime) - Int64(TempFileTime));
          if FileTimeToSystemTime(TempFileTime, TempTime) then
// hier hat er probleme beim convertieren weil davor wohl schon beim abrechnen was falsch gelaufen ist
            Result := TempTime
          else
            MessageBoxA(0, PChar('convert to systemtime fail'), 'hallocap', MB_OK or MB_ICONEXCLAMATION)
        end
      else
      MessageBoxA(0, PChar('current time fehl'), 'hallocap', MB_OK or MB_ICONEXCLAMATION)
    else
      MessageBoxA(0, PChar('temp time fehl'), 'hallocap', MB_OK or MB_ICONEXCLAMATION);
end;

lbccaleb 1. Jun 2008 20:53

Re: filtetime - filetime??
 
Zitat:

Zitat von marabu
Hallo,

ein Problem entsteht, wenn du zwei FileTime-Werte voneinander abziehst: Es entsteht ein Zeitintervall. Du kannst ein Zeitintervall zwar wieder in eine SystemTime konvertieren, aber das Ergebnis macht eigentlich keinen Sinn.

Nachdenkliche Grüße

und was kann ich tun damits wieder nen sinn ergibt?? ich will ja nur von zwei zeiten den countdown haben!! wie ich da ran komme ist egal, nur es muss halt über TFileTime oder TSystemTime sein!

marabu 1. Jun 2008 21:17

Re: filtetime - filetime??
 
Hallo Martin,

der Name deiner Funktion zeigt mir, dass du schon weißt, dass die Differenz zweier Zeitpunkte die Länge des Zeitintervalls angibt. Du kannst diesen Wert ruhig in ein Datum aus dem Mittelalter konvertieren, musst dir halt nur über die Bedeutung der Werte in SYSTEMTIME im klaren sein.

Gute Nacht.

lbccaleb 1. Jun 2008 21:21

Re: filtetime - filetime??
 
Zitat:

Zitat von marabu
Hallo Martin,

der Name deiner Funktion zeigt mir, dass du schon weißt, dass die Differenz zweier Zeitpunkte die Länge des Zeitintervalls angibt. Du kannst diesen Wert ruhig in ein Datum aus dem Mittelalter konvertieren, musst dir halt nur über die Bedeutung der Werte in SYSTEMTIME im klaren sein.

Gute Nacht.

das versteh ich irgend wie nicht oO

das kann doch nicht so schwierig sein, wo haperts denn?? bin das denn falsch angegangen mit minus rechnen oder wie??

marabu 1. Jun 2008 21:27

Re: filtetime - filetime??
 
Die Subtraktion ist schon in Ordnung.

Eine mögliche Fehlerquelle ist deine Verwendung von GetLocalTime(), wenn der beim Aufruf übergebene Zeitwert eine UTC-Zeit ist. Die Funktion FileTimeToSystemTime() arbeitet nur auf einem bestimmten Wertebereich.

Lass dir doch die Zwischenergebnisse mal anzeigen und benutze SysErrorMessage(GetLastError).

lbccaleb 1. Jun 2008 21:34

Re: filtetime - filetime??
 
also muss ich wie hier verfahren mit der conversation??

zeitzonen

und "SystemTimeToTzSpecificLocalTime" verwenden??

edit:


Delphi-Quellcode:
        begin;
          TempFileTime := TFileTime(Int64(CurrentFileTime) - Int64(TempFileTime));
          if FileTimeToSystemTime(TempFileTime, TempTime) then
            Result := TempTime
          // hier gibt GetLastError "ungültiger Parameter aus", nur wieso??
        end


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 Uhr.
Seite 1 von 2  1 2      

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