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


Dans mon programme Java, j'ai besoin de créer une instance du moment actuel dans le temps. 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. Existe-t-il un moyen d'obtenir la date et l'heure actuelles à partir d'un serveur en ligne? Le serveur de temps du monde peut-être?

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

En un mot, je veux obtenir une date et une heure ne dépend pas de l'horloge système de la machine hôte.

Merci!

Author: Community, 2010-05-12

3 answers

Vous pouvez jeter un oeil à la démo du client Java NTP disponible à

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

Et un exemple de code qui utilise ce client

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

C'est environ 170 lignes de code java bien documenté.

 7
Author: aioobe, 2010-05-12 09:32:21

Réseau local

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

Protocole de temps réseau

Ou vous pourriez utiliser le bien porté Protocole de temps réseau (NTP) avec les implémentations serveur et client existantes fournies avec la plupart desOS . Pour plus d'informations à ce sujet, voir la réponse acceptée par aioobe.

Envisagez de placer cet ordinateur de serveur de temps dans DMZ du réseau afin de mettre à jour des serveurs de temps sur Internet tels que le pool.ntp.org projet ou ceux fournis par le gouvernement fédéral des États-Unis (NIST) .

Internet

Si votre machine est connectée aux internets, connectez-vous à un serveur de temps fiable. 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 à partir d'une horloge en ligne.

Voir aussi les questions: Client NTP Java, et Client Java pour serveur de temps, tel que Network Time Protocol (NTP).

Horloge radio

Obtenir uneradio-horloge avec une connexionUSB pour la sortie de l'heure actuelle synchronisée par un code temporel transmis par un émetteur radio connecté à une norme de temps telle qu'une horloge atomique. Les émetteurs diffusent dans de nombreux pays du monde entier.

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

photo de quelques appareils d'horloge radio externes

GPS

Semblable aux horloges radio ci-dessus, un récepteur de signaux GPS (Global Positioning System ) pourrait également capturer et relayer letime signal . Ou peut-être GALILEO, GLONASS ou autreService de radionavigation par satellite .

Cadran solaire

Placez un cadran solaire à l'extérieur d'une fenêtre. Joindre un webcam à l'ordinateur en question. Positionnez la webcam dans la fenêtre. Écrire une application pour interpréter l'heure de la journée à partir de l'image courante du cadran.

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

Mise en garde: Cette solution ne fonctionne pas dans Seattle.


java.time.Clock

Pour exploiter l'un de ces fournisseurs de l'instant actuel, écrire une sous-classe de l'abstrait java.time.Clock classe.

Vous pouvez passer votre implémentation Clockcomme argument aux différents java.temps méthodes. Par exemple, Instant.now( clock ).

Instant instant = Instant.now( yourClockGoesHere ) ;

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

Évitez les classes date-heure héritées des premières versions de Java, telles que Date & Calendar. Ces classes gênantes sont entièrement supplantées par le java.temps classes.


À propos de java.temps

Le java.temps framework est intégré à Java 8 et versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date-heure classes telles que java.util.Date, Calendar, & SimpleDateFormat.

Le Joda-Temps le projet, maintenant en mode de maintenance, conseille la migration vers le java.temps classes.

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

, Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un pilote JDBC compatible avec JDBC 4.2 ou plus tard. Pas besoin de chaînes, pas besoin de classes java.sql.*.

Où obtenir le java.les classes de temps?

  • Java SE 8, Java SE 9, et plus tard
    • Intégré.
    • Partie de l'API Java standard avec une implémentation groupée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de java.fonction temps est de retour, porté à Java 6 et 7ThreeTen-Backport.
  • Android
    • Versions ultérieures des implémentations de bundle Android du java.les classes de temps.
    • Pour Android plus tôt, le Troisabp le projet adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser Troisabp....

Le Trois-Extra le projet étend java.temps avec des cours supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts futurs à java.temps. Vous pouvez trouver quelques classes utiles ici comme Interval, YearWeek, YearQuarter, et plus.

 3
Author: Basil Bourque, 2018-03-01 22:37:58

Normalement, les serveurs synchronisent leur temps régulièrement avec les serveurs de temps en ligne. L'heure de votre serveur doit donc être exacte. Sinon, contactez votre administrateur.

Pour obtenir par exemple l'heure GMT, utilisez les classes Calendrier et fuseau horaire.

 -3
Author: ZeissS, 2010-05-12 09:29:43