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/)
-   -   Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel... (https://www.delphipraxis.net/173326-datei-aenderungsuhrzeit-einer-schleife-aendern-1-stunde-zuviel.html)

juergen 17. Feb 2013 19:19

Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
Hallo zusammen,

ich suche schon eine ganze Weile, finde aber das eigentlich Problem nicht und weiß wohl deswegen auch nicht so recht wonach ich suchen muss.
In einer Schleife ändere ich die Uhrzeit. Dabei wird die Beginn-Uhrzeit als Offset gesetzt und dann die Anzahl der Sekunden, um welche sich die UHrzeit bei jeder neuen Datei erhöhen soll.
Im Debugger werden mir die richtigen Werte der Funktionen angezeigt! Im Betriebssystem wird die letzte Datei aus der Schleife mit der richtigen Uhrzeit angezeigt, alle anderen Dateien sind um genau 1 Stunde zu hoch....

Hier mein relevanter Code:

Delphi-Quellcode:
function GetFileDate(TheFileName: string): TDateTime;
var
  FHandle: integer;
begin
  FHandle := FileOpen(TheFileName, 0);
  try
    Result := (FileDateToDateTime(FileGetDate(FHandle)));
  finally
    FileClose(FHandle);
  end;
end;

procedure TMain_Form.Set_myNewFileTime(FileName: string);
var
  OldFDate, FileDate: TDateTime;
  OldFTime, NewFTime, Start_Time: Double;
begin
  if (Chckb_Uhrzeit_hochzaehlen.Checked) and ((Time_pick_Datei_Offsettime.Text <> '00:00:00') or (SpEdt_Sekundenzaehler.Value <> 0)) then begin
    OldFDate := GetFileDate(FileName);
    Start_Time := (Time_pick_Datei_Offsettime.Value);
    NewFTime := Start_Time + (SpinEdit_Sekundenzaehler.Value / 86400);
    FileDate := Trunc(OldFDate) + NewFTime;
    ChangeFileTimeStamp(FileName, FileDate);
  end;
end;

procedure....
var
  li_Sekundenzaehler : Integer;
beginn
  li_Sekundenzaehler := SpEdt_Sekundenzaehler.Value;
  //Beginn Schleife...
  Set_myNewFileTime(FileName); //
  SpEdt_Sekundenzaehler.Value := SpEdt_Sekundenzaehler.Value + li_Sekundenzaehler;
...
  //Ende Schleife
  SpEdt_Sekundenzaehler.Value := li_Sekundenzaehler;
end;
Mit den ganzen Datumsfunktionen stehe ich eh etwas auf Kriegsfuß, allzumal wenn man wenig damit arbeitet.

Kann mir hier jemand den richtigen Schubser geben?
Vielen Dank!

Dalai 17. Feb 2013 19:24

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
Auch wenn ich nicht wirklich Ahnung habe: Kann es sein, dass die Zeitstempel im Programm bzw. den Funktionen in UTC sind? Das würde genau zu der Stunde Differenz passen.

MfG Dalai

juergen 17. Feb 2013 19:47

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
@Dalai,
das denke ich auch dass es irgendwo an der UTC-Zeit liegt. Doch warum hat die letzte Datei aus der Schleife dann den richtigen Uhrzeitwert? Wahrscheinlich hängt es beim
FileGetDate. In der Hilfe steht dass die Betriebssytemuhrzeit ausgelesen wird. Ob das die UTC-Zeit ist?
Momentan weiß ich nicht wie ich das Problem lösen könnte.:oops:

Dalai 17. Feb 2013 21:07

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
Zitat:

Zitat von juergen (Beitrag 1204048)
In der Hilfe steht dass die Betriebssytemuhrzeit ausgelesen wird. Ob das die UTC-Zeit ist?

Nein. UTC ist "die Weltzeit" (und mehr oder minder mit GMT identisch). Die Betriebssysteme nutzen aber in aller Regel lokale Zeit, wobei Linux und Windows unterschiedliche Annahmen darüber machen, mit welcher Zeit die Hardwareuhr läuft (Linux nimmt in aller Regel UTC an, Windows aber lokale Zeit). Ich dachte es mir ja fast, dass die API-Funktionen mit lokaler Zeit arbeiten, aber es hätte ja sein können, dass es irgendwas damit zu tun hat.

MfG Dalai

Angel4585 18. Feb 2013 09:37

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
Wieviele Dateien sind das?
Bringt eine andere Anzahl Dateien ein anderes Ergebnis?

Liegt es evtl. an der Datei selbst? Was passiert, wenn eine andere als letztens dran ist?

Time_pick_Datei_Offsettime ist ein TDateTimePicker?
Hast du mal Time_pick_Datei_Offsettime.Time oder Trunc(Time_pick_Datei_Offsettime.Value) anstatt Time_pick_Datei_Offsettime.Value getestet?

juergen 18. Feb 2013 18:38

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
Hallo Angel4585,

danke für deine Unterstützung!:thumb:
Bei Verwendung mit Trunc(Time_pick_Datei_Offsettime.Value) oder Trunc(Time_pick_Datei_Offsettime.Time) kommen ganz falsche Uhrzeiten raus, allerdings wieder mit dem selben Verhalten: Bis auf die letzte Datei haben alle anderen Dateien eine Stunde zuviel.
Das Verhalten habe ich bei anderen Dateien auch bzw. auch bei unterschiedlicher Anzahl von Dateien, die letzte Datei aus der Schleife hat die richtige Uhrzeit, alle anderen haben eine Stunde zuviel...

hmm, Ratlose Grüße

Dalai 18. Feb 2013 19:48

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
Nach einem intensiveren Blick auf deinen Code fiel mir dies noch auf:
Delphi-Quellcode:
[...] SpEdt_Sekundenzaehler.Value [...]
NewFTime := Start_Time + (SpinEdit_Sekundenzaehler.Value / 86400);
Gibt es zwei davon oder ist das nur ein Versehen/Vertipper?

MfG Dalai

juergen 18. Feb 2013 19:55

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
Hallo Dalai ,
:oops: ist ein versehen, nur hier...

Angel4585 18. Feb 2013 19:58

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
Ja natürlich nicht Trunc(), bin ich doof xD Trunc() gibt den ganzzahligen Anteil zurück.
Na wie war das mit dem NACHkomma-anteil? Komm grad nicht drauf, bin schon müde...

mich würde die gesamte procedure mit BeginSchleife und EndSchleife interessieren, liegt da vielleicht das Problem?

juergen 18. Feb 2013 20:12

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
du meintest wahrscheinlich Frac(). Leider hilft das auch nicht weiter, weder mit SpEdt_Sekundenzaehler.Time noch mit SpEdt_Sekundenzaehler.Value noch mit Frac(NewFTime)


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