Java: obtenir la date et l’heure actuelles du serveur et non de l’horloge système

Dans mon programme Java, je dois créer une instance du moment présent. j’utilise

Date date = new Date(); 

Cela me donne la date et l’heure actuelles selon l’horloge système de la machine hôte. Est-il possible d’obtenir la date et l’heure actuelles d’un serveur en ligne? Le serveur de temps mondial peut-être?

J’ai vu ce post et il décrit ce que je veux mais j’ai bien peur d’avoir besoin de plus d’aide que ce qui y est fourni.

En un mot, je souhaite obtenir une date et une heure indépendantes de l’horloge système de la machine hôte.

Merci!

Vous pouvez consulter la démo du client NTP Java disponible à l’adresse

http://www.docjar.com/html/api/examples/ntp/NTPClient.java.html

et quelques exemples de code utilisant ce client

http://www.docjar.com/html/api/examples/ntp/TimeClient.java.html

Il s’agit d’environ 170 lignes de code java bien documenté.

Réseau local

Si votre machine est connectée à un réseau local, connectez-vous à une machine faisant office de serveur de temps de confiance. Vous pouvez écrire votre propre serveur de temps.

Protocole de temps réseau

Vous pouvez également utiliser le protocole NTP (Network Time Protocol) bien utilisé avec les implémentations de serveur et client existantes associées à la plupart des systèmes d’ exploitation . Pour plus d’informations à ce sujet, voir la réponse acceptée par aioobe .

Envisagez de placer cet ordinateur serveur de temps dans la zone démilitarisée du réseau afin d’effectuer des mises à jour à partir de serveurs de temps sur Internet tels que le projet pool.ntp.org ou fournis par le gouvernement fédéral des États-Unis (NIST) .

l’Internet

Si votre machine est connectée aux internets, connectez-vous à un serveur de temps de confiance. Comme indiqué ci-dessus, utilisez un protocole personnalisé, tel qu’un service Web, ou utilisez NTP .

Ceci est discuté dans la Question, comment faire en sorte que mon application Java obtienne l’heure globale d’une horloge en ligne .

Voir aussi Questions: client NTP Java et client Java pour le serveur de temps, tel que le protocole NTP (Network Time Protocol) .

Radio-réveil

Procurez-vous une horloge radio avec une connexion USB pour la sortie de l’heure actuelle synchronisée par un code temporel transmis par un émetteur radio connecté à un standard horaire tel qu’une horloge atomique. Les émetteurs diffusent dans de nombreux pays du monde entier.

La société Meinberg Global , au moins, propose plusieurs de ces dispositifs .

photo d'un couple de dispositifs d'horloge radio externes

GPS

Semblable aux horloges radio ci-dessus, un récepteur de signaux GPS ( système de positionnement global ) peut également capturer et relayer le signal horaire . Ou peut-être Galileo , GLONASS ou un autre service de radionavigation par satellite .

Cadran solaire

Placez un cadran solaire à l’ extérieur d’une fenêtre. Connectez une webcam à l’ordinateur en question. Positionnez la webcam dans la fenêtre. Ecrivez une application pour interpréter l’heure de la journée à partir de l’image actuelle du cadran solaire.

photo d'un cadran solaire sur un piédestal dans un jardin

Avertissement: cette solution ne fonctionne pas à Seattle .


java.time.Clock

Pour exploiter l’un de ces fournisseurs du moment actuel, écrivez une sous-classe de la classe abstraite java.time.Clock .

Vous pouvez passer votre implémentation de Clock comme argument aux différentes méthodes java.time . Par exemple, Instant.now( clock ) .

 Instant instant = Instant.now( yourClockGoesHere ) ; 

À des fins de test, notez les autres implémentations de Clock disponibles statiquement à partir de Clock lui-même: fixed , offset , tick , etc.

Évitez les anciennes classes date-heure des versions les plus anciennes de Java, telles que Date et Calendar . Ces classes gênantes sont entièrement remplacées par les classes java.time .


À propos de java.time

Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes de date / heure problématiques telles que java.util.Date , Calendar et SimpleDateFormat .

Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .

Pour en savoir plus, voir le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Vous pouvez échanger des objects java.time directement avec votre firebase database. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de java.sql.* Classes.

Où obtenir les classes java.time?

  • Java SE 8 , Java SE 9 et versions ultérieures
    • Intégré.
    • Partie de l’API Java standard avec une implémentation intégrée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité java.time est rétroscope vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Les versions ultérieures d’Android regroupent des implémentations des classes java.time.
    • Pour les versions antérieures d’Android, le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à java.time. Vous pouvez trouver ici des cours utiles tels que Interval , YearWeek , YearQuarter , etc.

Normalement, les serveurs synchronisent régulièrement leur heure avec les serveurs de temps en ligne. Donc, l’heure de votre serveur devrait être exacte. Sinon, contactez votre administrateur.

Pour obtenir, par exemple, l’heure GMT, utilisez les classes Calendar et TimeZone.