AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Differenz zur echten Uhrzeit in Sekunden ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Differenz zur echten Uhrzeit in Sekunden ermitteln

Ein Thema von philipp.hofmann · begonnen am 15. Jan 2021 · letzter Beitrag vom 21. Jan 2021
Antwort Antwort
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
874 Beiträge
 
Delphi 10.4 Sydney
 
#1

Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 15. Jan 2021, 22:39
Hi,

ich versuche mit TIdTime die Differenz zur wirklichen, aktuellen Uhrzeit ermitteln.
Dafür will ich TIdTime nutzen:

Ich ziehe mir die aktuelle Uhrzeit auf dem Rechner und die aktuelle Uhrzeit von TIdTime.
Jetzt habe ich auf einem iOS und einem Android-Device rund 2 Stunden-Unterschied, d.h. läuft noch irgendwas mit den Zeitzonen falsch.
Auf einem Rechner, der bei manueller Prüfung auf die Sekunde die gleiche Uhrzeit wie ein anderer hat, bekomme ich 30 Sekunden Unterschied raus.

Was mache ich hier falsch? Muss man andere TIdTime-Methoden nutzen? Ich würde ungerne die Systemzeit selbst durch diesen Check anpassen.

Delphi-Quellcode:
procedure TicTrainerF.syncTime();
var idTime:TIdTime;
    dtLocal,dtServer:TDateTime;
    msDiff:Int64;
begin
  idTime:=TIdTime.create(nil);
  try
    idTime.Host:='time.nist.gov';
    dtServer:=idTime.dateTime;
    if (dtServer>0) then
    begin
      dtLocal:=NOW;
      msDiff:=MillisecondsBetween(dtServer,dtLocal);
      if (dtLocal>dtServer) then
        syncTimeDiff:=msDiff*-1
      else
        syncTimeDiff:=msDiff;
      mlog.info('syncTime '+FloatToStrF(syncTimeDiff/1000,ffFixed,8,3,myFormatSettings)+'s');
    end else begin
      mlog.info('syncTime not possible²');
      syncTimeDiff:=0;
    end;
  finally
    hideHourGlass();
    idTime.free;
  end;
  except on E: Exception do
    begin
      mlog.info('syncTime not possible');
      syncTimeDiff:=0;
    end;
  end;
end;
Grüße, Philipp
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
3.942 Beiträge
 
Delphi 12 Athens
 
#2

AW: Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 16. Jan 2021, 10:52
Kenne mich mit TimeServern nicht so aus, aber kann es sein das man die Timezone bei der Anfrage mit angeben muss ?
Ich würde normalerweise UTC vermuten, die 2h deuten ja etwas darauf hin.
Schau doch mal was TIdTime wirklich macht.
  Mit Zitat antworten Zitat
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
874 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 16. Jan 2021, 12:11
Rein von der Doku her muss man keine Zeitzone mitgeben und bei meinen beiden Windows-Möhren geht es auch so, nur unter Android und iOS passiert etwas anderes:

TIdTime.DateTime:
  • DateTime is a read-only TDateTime property that reflects the estimated current date and time according to a Time server.
    DateTime is expressed in the timezone for the local computer.

TIdTime.SyncTime:
  • Updates local time to match the Time server.
    das wäre die Alternative, aber ob ich aus einer App die "local time" anpassen will, ich weiß nicht.

Werde ich wahrscheinlich mal den Indy-Code anschauen müssen.
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
104 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 16. Jan 2021, 17:12
Rein von der Doku her muss man keine Zeitzone mitgeben und bei meinen beiden Windows-Möhren geht es auch so, nur unter Android und iOS passiert etwas anderes
Ist denn auf den beiden Mobilgeräten die Zeitzone auch korrekt eingestellt?
  Mit Zitat antworten Zitat
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
874 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 16. Jan 2021, 18:08
Ja, die Zeitzone stimmt auf den Geräten. Ich habe auch schon überlegt als Zeitdifferenz nur
msDiff:=MillisecondsBetween(dtServer,dtLocal) mod 3600000; zu nehmen, aber wie gesagt, dann kommen bei einem Device 30 Sekunden Differenz raus, obwohl die Uhrzeit ziemlich genau die gleiche ist (maximal +/- 1 Sekunde). Da baue ich mal noch ein paar mehr Loggings ein, vielleicht braucht er auch so lange um den Time-Server abzufragen, dann wäre es eh unbrauchbar für die Differenzen auf Sekundenebene einzustellen.

Das es wohl bei 2 Stunden UTC sein sollte, ist mir klar, weiß ich aber ja auch nur, weil ich es hier bei mir in Deutschland aufrufe. Mir ist noch unklar, wie ich daraus eine allgemein gültige Regel machen sollte, da es bei meinen Windows-Geräten stimmt. Einem TDateTime sieht man ja die Zeitzone nicht an.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.871 Beiträge
 
Delphi 12 Athens
 
#6

AW: Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 17. Jan 2021, 15:57
Hallo,

falls du hier keine weiterführenden ANtworten bekommnst könntest du mal in der EN DP posten (ich vermute du kannst Englisch),
da liest m.w. zumindest einer der Indy Entwickler mit!

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.408 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 19. Jan 2021, 08:01
TIdTime.SyncTime:
  • Updates local time to match the Time server.
    das wäre die Alternative, aber ob ich aus einer App die "local time" anpassen will, ich weiß nicht.
Das ist unter Android z.B. gar nicht möglich. Leider kann eine App dort nur z.B. die Atomzeit als Überblendung anzeigen, damit man diese manuell einstellen kann.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
874 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 19. Jan 2021, 12:08
Wie gesagt, es wäre auch nicht mein bevorzugter Weg die Uhrzeit auf dem Rechner zu synchronisieren. Ich dachte mir auch schon, dass dies sicherlich aus Berechtigungsgründen nicht geht.
Ich gebe jetzt mal noch zusätzlich in meinem Output TTimeZone.Local.ToUniversalTime(...) aus, damit ich ausschließe, dass es hier ein falsches Setting auf den einzelnen Rechnern/Tablets gibt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.335 Beiträge
 
Delphi 12 Athens
 
#9

AW: Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 19. Jan 2021, 13:06
Man muß auch nicht unbedingt direkt die Uhr ändern.

Bei uns wird die Serverzeit abgefragt und mit der lokalen Zeit die Differenz gebildet. (beim Start und regelmäßig zwischendrin, während der Connectionchecks, wegen der Schaltjahre, Schaltsekunden und sonstwas)
Die meisten Operationen laufen in der Datenbank ab, also mit der Serverzeit, wellche sich selbst über einen Timeserver updated (current_time im SELECT/INSERT/UPDATE, anstatt Now über Parameter),
aber für Anzeigen im Programm, welche z.B. lokal über Now bestimmt wurden, da wird dann einfach diese Differenz hinzugerechnet, damit das mit der Serverzeit in etwa übereinstimmt, egal was die Uhr im Rechner sagt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Jan 2021 um 13:11 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#10

AW: Differenz zur echten Uhrzeit in Sekunden ermitteln

  Alt 16. Jan 2021, 16:13
Ich würde normalerweise UTC vermuten, die 2h deuten ja etwas darauf hin.
Ich auch.
Hatte das gleiche Problem letztens mit meinem Video Player.

Geändert von venice2 (16. Jan 2021 um 16:15 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 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