En mi progtwig Java, necesito crear una instancia del momento actual en el tiempo. yo suelo
Date date = new Date();
Esto me da la fecha y hora actuales según el reloj del sistema de la máquina host. ¿Hay alguna manera de obtener la fecha y hora actual de un servidor en línea? El servidor del tiempo mundial tal vez?
He visto esta publicación y describe lo que quiero, pero me temo que necesito más ayuda de la que se proporciona allí.
En pocas palabras, quiero obtener una fecha y una hora que no dependan del reloj del sistema de la máquina host.
¡Gracias!
Puede echar un vistazo a la demostración del Cliente Java NTP disponible en
http://www.docjar.com/html/api/examples/ntp/NTPClient.java.html
y algún código de ejemplo que utiliza este cliente
http://www.docjar.com/html/api/examples/ntp/TimeClient.java.html
Se trata de 170 líneas de código Java bien documentado.
Si su máquina está conectada a una red local, conéctese a alguna máquina que funcione como un servidor de tiempo confiable. Podrías escribir tu propio servidor de tiempo.
O bien, podría utilizar el bien gastado Network Time Protocol (NTP) con las implementaciones existentes de servidor y cliente integradas con la mayoría de los sistemas operativos . Para más información sobre esto, vea la Respuesta aceptada por aioobe .
Considere colocar esa computadora servidor de tiempo en la zona desmilitarizada de la red para actualizaciones de servidores de tiempo en Internet, como el proyecto pool.ntp.org o los proporcionados por el gobierno federal de los Estados Unidos (NIST) .
Si su máquina está conectada a los internets, conéctese a un servidor de tiempo confiable. Como se discutió anteriormente, use un protocolo personalizado, como un servicio web, o use NTP .
Esto se discute en la Pregunta, cómo hacer que mi aplicación java obtenga tiempo global a partir de algún reloj en línea .
Consulte también Preguntas: Cliente Java NTP y cliente Java para servidor de tiempo, como Network Time Protocol (NTP) .
Obtenga un reloj de radio con una conexión USB para la salida de la hora actual sincronizada por un código de tiempo transmitido por un transmisor de radio conectado a un estándar de tiempo como un reloj atómico. Los transmisores están transmitiendo en muchos países de todo el mundo.
La compañía Meinberg Global , al menos, ofrece varios de estos dispositivos .
Similar a los relojes de radio anteriores, un receptor de señales de GPS ( Sistema de Posicionamiento Global ) también podría capturar y transmitir la señal de tiempo . O tal vez GALILEO , GLONASS u otro servicio de Radionavegación por satélite .
Coloque un reloj de sol fuera de una ventana. Adjunte una cámara web a la computadora en cuestión. Coloque la cámara web en la ventana. Escribe una aplicación para interpretar la hora del día a partir de la imagen actual del reloj de sol.
Advertencia: esta solución no funciona en Seattle .
java.time.Clock
Para aprovechar cualquiera de estos proveedores del momento actual, escriba una subclase de la clase abstracta java.time.Clock
.
Puede pasar su implementación de Clock
como argumento a los diversos métodos de java.time . Por ejemplo, Instant.now( clock )
.
Instant instant = Instant.now( yourClockGoesHere ) ;
Para fines de prueba, tenga en cuenta las implementaciones alternativas de Clock
disponibles estáticamente desde el Clock
: fixed
, offset
, tick
y más.
Evite las clases heredadas de fecha y hora de las primeras versiones de Java, como Date
y Calendar
. Estas clases problemáticas son completamente suplantadas por las clases java.time .
El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las problemáticas antiguas clases heredadas de fecha y hora como java.util.Date
, Calendar
y SimpleDateFormat
.
El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .
Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
Puede intercambiar objetos java.time directamente con su base de datos. Use un controlador JDBC que cumpla con JDBC 4.2 o posterior. Sin necesidad de cadenas, sin necesidad de clases java.sql.*
.
¿Dónde obtener las clases de java.time?
El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y más .
Normalmente los servidores sincronizan su tiempo regularmente con servidores de tiempo en línea. Por lo tanto, la hora de su servidor debe ser precisa. Si no, contacta a tu administrador.
Para obtener, por ejemplo, la hora GMT, use las clases Calendar y TimeZone.