Entwickler-Ecke
Internet / Netzwerk - Problem beim Zeitabgleich
matze - So 13.10.02 12:13
Titel: Problem beim Zeitabgleich
Hallo !!!
Ich progge grad ein Programm, das sich die aktuelle Zeit ausm Inet per INDY Kompo holt.
Wenn ich die systemzeit aber mit ntp1.fau.de abgleichen lasse, wird die zeit immer um +eine stunde angezeit !!!
wieso ??
vielleich weil mein system die zeitzone GMT+1 hat ??? oder wie ??
und wie lässt sich das umgehen ?
LCS - Mo 14.10.02 13:17
Hi
die Zeit die du via NTP bekommst, basiert immer auf GMT. Umgehen kannst du das auch nicht. Du kannst nur diese Zeit mit den Informationen der einstellten Zeitzone abgleichen.
Die Info über die eingestellte Zeitzone liefert GetTimeZoneInformation. Fertigen Code kann ich dir auf die schnelle allerdings leider net anbieten.
Gruss Lothar
matze - Mo 14.10.02 15:30
jo. ich werd mal rumbasteln. wäre aber trotzdem nett, wenn du mal schaun könntest, ob du nen codeschnipsel posten könntest !!!
LCS - Mo 14.10.02 16:24
Jau, kriegst du morgen im Laufe des Tages.
Gruss Lothar
matze - Mo 14.10.02 16:50
du bist einfach der beste *freu* !!!
dafür wiest du auch in meinem proggi genannt !!
LCS - Di 15.10.02 08:44
Hi
| matze hat folgendes geschrieben: |
du bist einfach der beste *freu* !!!
|
Na das geht aber runter wie Öl :mrgreen:
Und hier ist die Funktion zur Umwandlung UTC in Lokalzeit
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function TForm1.UTC2Local(Zeit: TDateTime): TDateTime; var ti : Time_Zone_Information; i : cardinal; begin FillChar(ti, sizeof(Time_Zone_Information), 0); i := GetTimeZoneInformation( ti ); case i of TIME_ZONE_ID_UNKNOWN: Result := Zeit; TIME_ZONE_ID_STANDARD: Result := IncMinute(Zeit, ti.Bias * -1); TIME_ZONE_ID_DAYLIGHT: Result := IncMinute(Zeit, (ti.Bias + ti.DaylightBias) * -1); end; end; |
Umwandlung Lokalzeit in UTC
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function TForm1.Local2UTC(Zeit: TDateTime): TDateTime; var ti : Time_Zone_Information; i : cardinal; begin FillChar(ti, sizeof(Time_Zone_Information), 0); i := GetTimeZoneInformation( ti ); case i of TIME_ZONE_ID_UNKNOWN: Result := Zeit; TIME_ZONE_ID_STANDARD: Result := IncMinute(Zeit, ti.Bias); TIME_ZONE_ID_DAYLIGHT: Result := IncMinute(Zeit, (ti.Bias + ti.DaylightBias) ); end; end; |
Gruss Lothar
matze - Di 15.10.02 17:22
danke, aber mien proggi mach immernochnicht was ich will !!!! kannst du dir bitte mal den code hier anschauen !!!
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.BitBtn1Click(Sender: TObject); var zeit : tdatetime; begin if Combobox1.Text <> '' then begin try IdTime1.Host := combobox1.Text;
zeit := idtime1.DateTime;
zeit := UTC2Local (zeit);
if checkbox1.Checked = true then begin if CheckBRDSz(now) = true then zeit := IncHour(zeit,1); end;
MDateTime1.SetTime (zeit); MdateTime1.SetSysTime ; application.ProcessMessages; showmessage ('Zeit erfolgreich syncronisiert !!'); except Showmessage ('Fehler beim verbinden'); end; end else Showmessage ('Sie haben keinen Server gewählt !!'); end; |
MdateTime ist eine kompo, die dir das einstellen der systemzeit abnimmt.
Checkbox1 ist beschriftet mit 'Sommer / winterzeit berücksichtigen' und ist standartmässig checked := true !!
Die funktion CheckBRDsz gibts hier
http://www.auq.de/viewtopic.php?t=2926
LCS - Mi 16.10.02 08:29
Hi
| matze hat folgendes geschrieben: |
Checkbox1 ist beschriftet mit 'Sommer / winterzeit berücksichtigen' und ist standartmässig checked := true !!
Die funktion CheckBRDsz gibts hier http://www.auq.de/viewtopic.php?t=2926
|
Ja, ja ich weiss. Die ist von mir :mrgreen:
Allerdings brauchst du das in dem Fall nicht, weil UTC2Local die Sommer-/Winterzeit ganz automatisch berücksichtigt. Wenn du dann nochmal auf Sommerzeit checkst, ist das sozusagen doppelt gemoppelt. Lass es ganz einfach weg, dann sollte das korrekt funktionieren.
Gruss Lothar
matze - Mi 16.10.02 14:20
es geht aber immernochnicht !!! :cry: :cry:
der Code schlägt auf die Zeit immer genau 3 std drauf !!! warum ??
Ich habe mal den Code auf meine server geschoben:
http://www.matze.de.vu/Unit1.pas
PS: Die INcHour und IncMinute habe ich manuell eingefügt, weil die Dateutils bei mir nicht gehen !!! (warum auch immer...)
LCS - Do 17.10.02 08:22
Hi matze
ich hab das jetzt mal ausgetestet. Timeserver ptbtime1.ptb.de.
Die Fastnet TNMTime Komponente lieferte 07:16 UTC. Mit der Funktion UTC2Local umgerechnet ergab 09:16.
Die Indy TIdTime Komponente lieferte 09:16 Lokalzeit. Hier scheint also die Umrechnung gleich durch die Komponente gemacht zu werden. Die ganze Umrechnerei kannst du dir also sparen. :D
Die ganzen Datumsfunktionen befinden sich übrigens bis Delphi 5 in der Unit SysUtils, ab Delphi 6 in der Unit DateUtils. Je nach Version musst du also die eine oder andere in deine Uses-Klausel aufnehmen.
Gruss Lothar
matze - Do 17.10.02 14:50
Das ist mein einziger kommentar dazu: :autsch:
matze - Do 17.10.02 15:36
AARRRGH !!!
ES GEHT ABER IMMER NOCH NICHT !!! Ich hab jetzt die Routinen rausgenommen und das proggi schlägt immernoch 2 std auf die zeit drauf !!!
Wieso ?? *heul*
LCS - Fr 18.10.02 07:35
Schau mal in dein Postfach.
Gruss Lothar
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!