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/)
-   -   Systemzeit verändern (https://www.delphipraxis.net/49999-systemzeit-veraendern.html)

Kompon Ente 19. Jul 2005 14:44


Systemzeit verändern
 
Hallo,

ich ermittle durch ein paar Funktionen usw. die aktuelle Uhrzeit von der Physikalisch-Technischnen Bundesanstalt. Jetzt hab ich die Zeit ermittelt und in einem String stehen. Nun möchte ich diese als Systemzeit festlegen. Wie geht das?

Matze 19. Jul 2005 14:46

Re: Systemzeit verändern
 
Wenn du ein Thema erstellst, gibt es unter der Titeleingabe ein Such-Button, nutze ihn doch mal [dp]systemzeit *ändern[/dp]

Luckie 19. Jul 2005 14:46

Re: Systemzeit verändern
 
Geht mit der API Funktion MSDN-Library durchsuchenSetSystemTime. Beispielprogramm findest du mit Code auf meiner Homepage: http://www.luckie-online.de/Developer/Delphi/Programme/ .> INetTime.

BenjaminH 19. Jul 2005 14:46

Re: Systemzeit verändern
 
http://www.delphipraxis.net/internal...91569741cc95de

Matze 19. Jul 2005 14:48

Re: Systemzeit verändern
 
Wenn nun alles da steht, hier noch was.

Kompon Ente 19. Jul 2005 15:04

Meine Variablen sind czeit und izeit (vom Typ TTime).

Momentan sieht es so aus:
Delphi-Quellcode:
EditTime.Text := TimeToStr(czeit - izeit);
Ich habe dort nun die Uhrzeit stehen und möchte sie als Systemzeit setzen.

Geht das

Delphi-Quellcode:
SetSystemTime(czeit - izeit);
so?

DP-Maintenance 19. Jul 2005 15:06

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Klatsch und Tratsch" nach "Windows API / MS.NET Framework API" verschoben.
Und bitte, bitte, bitte, stelle die Delphi-Fragen auch in den Delphi-Sparten :roll:

DGL-luke 19. Jul 2005 16:00

Re: Systemzeit verändern
 
probiers halt aus! wobei TTime glaube ich nicht UTC ist, sondern "anzahl sekunden seit 1.1.1970".

Sharky 19. Jul 2005 16:09

Re: Systemzeit verändern
 
Ist doch eigentlich ganz einfach.

Einen TDateTime mit Delphi-Referenz durchsuchenDateTimeToSystemTime wandelnd und dann mit Delphi-Referenz durchsuchenSetSystemTime die Zeit setzen.

Kompon Ente 22. Jul 2005 07:56

Zur Zeit hab ich's so:

Delphi-Quellcode:
SetSystemTime(DateTimeToSystemTime(czeit - izeit));
Aber sind wohl zu wenige Parameter. Die Variablen sind vom Typ TTime!

barf00s 22. Jul 2005 08:03

Re: Systemzeit verändern
 
man R T F M!!! (bzw die obigen links)

anders kammers echt nich mehr sagen

"kann ichs so machen?"
"kann ich das machen?"

PROBIERS HALT AUS!











-- isja nich auszuhalten manchma

Steve 22. Jul 2005 08:08

Re: Systemzeit verändern
 
Hi,

schau Dir doch mal die Hilfe zu DateTimeToSystemTime an. Dann wirst Du sehen, dass dies keine Funktion, sondern eine Prozedur ist, die die SystemTime in einen VAR-Parameter schreibt:
Delphi-Quellcode:
procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);
Gruß
Stephan :dance:

[edit]Tippfehler...[/edit]

[edit2]Warum TTime und nicht TDateTime?[/edit2]

Kompon Ente 22. Jul 2005 08:14

Weil's so ist? *g*

Sharky 22. Jul 2005 08:24

Zitat:

Zitat von Kompon Ente
Weil's so ist? *g*

Nur als Anmerkung:

Delphi-Referenz durchsuchenTTime = Delphi-Referenz durchsuchenTDate = Delphi-Referenz durchsuchenTDateTime = Delphi-Referenz durchsuchenDouble

Steve 22. Jul 2005 08:28

Re: Systemzeit verändern
 
Joa vom Typ her ists das gleiche, aber TTime ist ja eigentlich für die reine (Uhr-)Zeitangabe ohne Datum, TDate fürs reine Datum ohne Zeitangabe und TDateTime ja für beides. Mag Kniebohrerei sein, aber ich wollt's mal eingeworfen haben :angel2:

Gruß
Stephan :dance:

Kompon Ente 22. Jul 2005 08:29

So soll's ja auch sein. Ich möchte nur die Zeit stellen, nicht das Datum! ;)

Sharky 22. Jul 2005 08:30

Re: Systemzeit verändern
 
Zitat:

Zitat von Steve
Joa vom Typ her ists das gleiche, ...

Hai tanzender Stephan :-D

Ich wollte damit auch nur anzeigen das es nicht funktionier nur die Uhrzeit zu setzen wenn man TTime verwendet. Da auch hier ein Datumsanteil vorhanden ist kann dies zu verwirrungen führen.

Steve 22. Jul 2005 09:35

Re: Systemzeit verändern
 
Achso... ja... gut..., das wollt ich eigentlich auch damit sagen :mrgreen:

Gruß
Stephan :dance:

Kompon Ente 22. Jul 2005 09:41

Ich hab mich jetzt entschieden das Datum doch mitzustellen, ich brech mir dabei ja keinen ab! :D

Ich hab jetzt den Aufruf:
Delphi-Quellcode:
DateTimeToSystemTime(czeit - izeit + Date);
SetSystemTime(czeit - izeit);
Die Variablen czeit und izeit sind vom Typ TDateTime.

Allerdings fehlt hinter dem Date noch ein Parameter, aber welches?

czeit zieht die Zeit von izeit ab, die vergangen ist nach dem synchronisieren, um möglichst eine exakte Uhrzeit zu bekommen.

SubData 22. Jul 2005 09:44

Re: Systemzeit verändern
 
Es gibt da nur 3 Möglichkeiten..


• Du liest die Anleitungen nicht...
• Du liest die Anleitungen aber kannst oder willst sie nicht verstehen...
• Du willst uns verschaukeln...


Edit: Blödsinn korrigiert...

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?

Steve 22. Jul 2005 15:01

Hi,
Zitat:

Zitat von Kompon Ente
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? :|

:shock:
Ich kann leider absolut nicht erkennen, was Du da machen willst, aber ich versuchs!
Daher nun mal meine Fragen:
Du hast mit DateTimeToSystemTime Deine SystemTime k berechnet - warum änderst Du die danach wieder :?:
Zur letzten Zeile, vereinfacht steht da "x := x - y, z;" - Wie soll das funktionieren? Was soll das werden :?:

Gruß
Stephan :dance:

Sharky 22. Jul 2005 15:17

Zitat:

Zitat von Kompon Ente
Jo, und weiter? ...

Hai Kompon Ente,

ich stelle Dir jetzt einmal eine ganz einfache Frage:
Zitat:

Möchtest Du nicht verstehen was man dir sagt oder kannst Du es nicht verstehen?
Langsam habe ich das Gefühl das Du es einfach nicht verstehen möchtest. Es wurden jetzt genug Beispiele geliefert um deine Frage beantworten zu können :!:

Sei mir nicht böse... aber wenn Du jetzt nicht einmal versuchst das gezeigte zu verstehen werde ich auf keine Frage mehr antworten. (oder, um genau zu sein : alle weiteren Fraqgen von Dir sperren).


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