Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Systemzeit verändern (https://www.delphipraxis.net/49999-systemzeit-veraendern.html)

Sharky 22. Jul 2005 09:45

Zitat:

Zitat von Kompon Ente
... Allerdings fehlt hinter dem Date noch ein Parameter, aber welches?

Nö oder?
Lese Dir doch mal bitte alle Antworten in diesem Thread durch. Besonders würde ich ein Auge auf die von Steve werfen.

Zitat:

czeit zieht die Zeit von izeit ab, die vergangen ist nach dem synchronisieren, um möglichst eine exakte Uhrzeit zu bekommen.
Ähmmm... welche Zeit soll da denn vergangen sein?

Kompon Ente 22. Jul 2005 10:22

Also das läuft zwar, aber es gibt immer falsche Daten usw. zurück.

Es stellt das Jahr immer um 111 Jahre zurück, warum auch immer.

Hab im Moment:
Delphi-Quellcode:
DateTimeToSystemTime(czeit - izeit + Date, k);
SetLocalTime(k);
Variable k vom Typ TDateTime.

@Sharky: Das eine ist die Zeit, die abgezogen wird von der Zeit, die vergangen ist seitdem man die Zeit abgefragt hat. :)

Naja, das wird jetzt auch etwas tricky. Hat jemand 'ne andere Lösung, außer SetLocalTime oder SetSystemTime? Weil die spinnen schon etwas..

Sharky 22. Jul 2005 10:25

Okay,

letzter Versuch ;-)
Der Code basiert auf TIDTime von den Indys

Delphi-Quellcode:
function Time2UTC(aLocalTime: TDateTime): TDateTime;
const
  MinsPerDay = 24 * 60;
var
  zeitzone: TTimeZoneInformation;
  localdiff: integer;
begin
  localdiff := 0;
  case GetTimeZoneInformation(zeitzone) of
    TIME_ZONE_ID_STANDARD:
    begin
      localdiff := (zeitzone.Bias)
    end;
    TIME_ZONE_ID_DAYLIGHT:
    begin
      localdiff := (zeitzone.Bias) + (zeitzone.DaylightBias)
    end;
  end;
  Result := ((aLocalTime * MinsPerDay) + localdiff) / MinsPerDay;
end;

procedure SetzeComputerZeit (aTime : TDateTime);
var
  NewTime:   TDateTime;
  SystemTime: TSystemTime;
begin
  Newtime     := Time2UTC(aTime); // Zeit in UTC umwandeln
  DateTimeToSystemTime(NewTime, SystemTime); // In TSystemTime wandeln
  SetSystemTime(SystemTime); // *blubb*
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  SyncTime : TDateTime;
begin
  IdTime1.Host := 'ptbtime1.ptb.de'; // Time-Server
  SyncTime    := IdTime1.DateTime; // Zeit mit den Indys holen
  SetzeComputerZeit(SyncTime);
end;

SubData 22. Jul 2005 10:26

Re: Systemzeit verändern
 
Nein da spinnt nichts, du benutzt es nur nicht richtig...

Bist du mal mit nem Debugger durchgegangen und hast die einzelnen Werte LIVE geprüft?

Kompon Ente 22. Jul 2005 10:28

IdTime funktioniert nicht, bzw. das hab ich schon richtig eingebaut für die normale Internetverbindung. Leider funktioniert diese Komponente nicht bei Proxyservern, sonst würde ich sie da ja auch nehmen. ;)

Bei 'ner normalen Internetverbindung läuft alles einwandfrei.

Kompon Ente 22. Jul 2005 13:15

Hier mein Code:

Delphi-Quellcode:
  czeit := now;
  ShowMessage(DateTimeToStr(czeit));
  czeit := EncodeTime(0, 0, ((stop - start) div 1000), ((stop - start) mod 1000));

  DateTimeToSystemTime((izeit + czeit), k);

  DecodeTime(izeit, k.wHour, k.wMinute, k.wSecond, k.wMilliseconds);
  DecodeDate(izeit, k.wYear, k.wMonth, k.wDay);
  k.wSecond := k.wSecond - ((stop + start) mod 1000), ((stop + start) div 1000);
Die letzte Zeile funzt noch net so ganz. Was könnte falsch sein? :|

DGL-luke 22. Jul 2005 13:24

Re: Systemzeit verändern
 
sollte k wirklich TDateTime sein?

Dann würde sich das ganze Datetimetosystemtime ja erübrigen.

PS: du solltest wirklich ein wenig mehr eigeninitiative zeigen, Kompon Ente!

Kompon Ente 22. Jul 2005 13:25

k ist TSystemTime ;)

DGL-luke 22. Jul 2005 13:37

Zitat:

Zitat von Kompon Ente
Variable k vom Typ TDateTime.

K, sry, dein post weiter oben ließ aber anderes vermuten. :wink:

Kompon Ente 22. Jul 2005 13:44

Jo, und weiter? Ich muss ja das, was ich encode auch wieder decoden, weil Subtrahieren nicht erlaubt ist bei dieser Methode, sonst würde ich ja einfach sagen:

Delphi-Quellcode:
DateTimeToSystemTime((czeit - izeit), k);
Was mach ich nun?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.
Seite 3 von 4     123 4      

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