Kann man in Java die Zeit von einer Atomuhr beziehen?

4 Antworten

Das hat nichts mit Java zu tun sondern mit geeigneter Hardware des Rechners, die das Zeitsignal (DCF77) empfängt.

Informationen, die über das Internet bezogen werden, sind viel zu ungenau.

TheOrzoBiased  15.02.2017, 19:26

Warum sollte die Zeit über das Internet ungenauer sein als DCF77? DCF77 ist doch viel störanfälliger.

0
Mikkey  15.02.2017, 19:31
@TheOrzoBiased

Weil man nicht die Laufzeit genau des IP-Datenpakets kennt, in dem die Uhrzeit übertragen wird.

0

Es gibt das Protokoll NTP 

https://de.wikipedia.org/wiki/Network_Time_Protocol

mit dem man per TCP/IP von diversen NTP-Servern die aktuelle Zeit beziehen kann

Diese NTP-Server haben allerdings typischerweise keine eigene Atomuhr sondern beziehen über Funkempfänger von Zeitzeichensendern (die von Atomuhren gesteuert werden) die jeweilige Zeit die sie dann per Internet weitergeben.

Die Übertragung im Internet selbst dauert dann natürlich je nach Entfernung zum NTP-Server auch noch diverse Millisekunden - allerdings versucht NTP diese Zeit zu ermitteln (in dem es ein Paket zum NTP-Server schickt und die Zeit bis zur Antwort mißt - die Hälfte davon ist dann ungefähr die Übertragungsdauer in eine Richtung.

Somit ist die Zeit zwar nicht Millisekundengenau - aber sie weicht nie allzusehr von der tatsächlichen "Atomzeit" ab...

Für Java gibt es natürlich fertigen Code um die Uhrzeit von einem NTP-Server zu beziehen

https://commons.apache.org/proper/commons-net/examples/ntp/NTPClient.java

Seit XP synchronisiert Windows seine Zeit mit ntp Zeit-Servern. Wenn das konfiguriert ist, sollte deine Zeit für praktische Zwecke genau genug sein.

Unter Linux und ähnlichen Betriebssystemen sorgt der ntpd für diesen Zeitabgleich.

Das ntp Protokoll ist genau dafür geschrieben, dass es Signallaufzeiten im Internet berücksichtigt und die dadurch entstehenden Fehler korrigiert.

https://de.m.wikipedia.org/wiki/Network_Time_Protocol