![]() |
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? |
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]
|
Re: Systemzeit verändern
Geht mit der API Funktion
![]() ![]() |
Re: Systemzeit verändern
|
Re: Systemzeit verändern
Wenn nun alles da steht,
![]() |
Meine Variablen sind czeit und izeit (vom Typ TTime).
Momentan sieht es so aus:
Delphi-Quellcode:
Ich habe dort nun die Uhrzeit stehen und möchte sie als Systemzeit setzen.
EditTime.Text := TimeToStr(czeit - izeit);
Geht das
Delphi-Quellcode:
so?
SetSystemTime(czeit - izeit);
|
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: |
Re: Systemzeit verändern
probiers halt aus! wobei TTime glaube ich nicht UTC ist, sondern "anzahl sekunden seit 1.1.1970".
|
Re: Systemzeit verändern
Ist doch eigentlich ganz einfach.
Einen TDateTime mit ![]() ![]() |
Zur Zeit hab ich's so:
Delphi-Quellcode:
Aber sind wohl zu wenige Parameter. Die Variablen sind vom Typ TTime!
SetSystemTime(DateTimeToSystemTime(czeit - izeit));
|
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 |
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:
Gruß
procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);
Stephan :dance: [edit]Tippfehler...[/edit] [edit2]Warum TTime und nicht TDateTime?[/edit2] |
Weil's so ist? *g*
|
|
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: |
So soll's ja auch sein. Ich möchte nur die Zeit stellen, nicht das Datum! ;)
|
Re: Systemzeit verändern
Zitat:
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. |
Re: Systemzeit verändern
Achso... ja... gut..., das wollt ich eigentlich auch damit sagen :mrgreen:
Gruß Stephan :dance: |
Ich hab mich jetzt entschieden das Datum doch mitzustellen, ich brech mir dabei ja keinen ab! :D
Ich hab jetzt den Aufruf:
Delphi-Quellcode:
Die Variablen czeit und izeit sind vom Typ TDateTime.
DateTimeToSystemTime(czeit - izeit + Date);
SetSystemTime(czeit - izeit); 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. |
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... |
Zitat:
Lese Dir doch mal bitte alle Antworten in diesem Thread durch. Besonders würde ich ein Auge auf die von Steve werfen. Zitat:
|
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:
Variable k vom Typ TDateTime.
DateTimeToSystemTime(czeit - izeit + Date, k);
SetLocalTime(k); @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.. |
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; |
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? |
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. |
Hier mein Code:
Delphi-Quellcode:
Die letzte Zeile funzt noch net so ganz. Was könnte falsch sein? :|
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); |
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! |
k ist TSystemTime ;)
|
Zitat:
|
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:
Was mach ich nun?
DateTimeToSystemTime((czeit - izeit), k);
|
Hi,
Zitat:
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: |
Zitat:
ich stelle Dir jetzt einmal eine ganz einfache Frage: Zitat:
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 00:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz