Estoy haciendo una aplicación java distribuida para la cual necesito que ambas partes de la aplicación se ejecuten en un momento estándar. Como los tiempos del sistema pueden ser diferentes, ¿estaba pensando si la API de Java contiene alguna clase para descargar el tiempo de una fuente en línea estándar?cómo hacer que mi aplicación java obtenga tiempo global desde algún reloj en línea
Respuesta
Es necesario utilizar el NTP (Network Time Protocol):
http://en.wikipedia.org/wiki/Network_Time_Protocol
El siguiente enlace contiene algo de código Java del cliente NTP de referencia para interactuar con un servidor NTP:
Aquí hay un código que encontré alguna vez más ... y lo estoy usando. esto usa la biblioteca de Apache commons.
// List of time servers: http://tf.nist.gov/service/time-servers.html
import java.net.InetAddress;
import java.util.Date;
import org.apache.commons.net.ntp.NTPUDPClient;
import org.apache.commons.net.ntp.TimeInfo;
public class TimeLookup {
public static final String TIME_SERVER = "time-a.nist.gov";
public static void main(String[] args) throws Exception {
NTPUDPClient timeClient = new NTPUDPClient();
InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
TimeInfo timeInfo = timeClient.getTime(inetAddress);
long returnTime = timeInfo.getReturnTime();
Date time = new Date(returnTime);
System.out.println("Time from " + TIME_SERVER + ": " + time);
}
}
prestar atención .... timeInfo.getReturnTime()
no devuelve la hora actual del timeserver
. devuelve la hora local cuando se realizó la solicitud al server
.
después de llamar a timeInfo.computeDetails()
es posible obtener el desplazamiento por timeInfo.getOffset().
esto devuelve el desplazamiento de la hora local en milisegundos.
para calcular la hora actual se podría hacer algo como:
...
long systemtime = System.currentTimeMillis();
Date realdate = new Date(systemtime + timeInfo.getOffset());
...
Gracias Rajendra_Prasad que es verdad
public static void main(String[] args) throws Exception {
NTPUDPClient timeClient = new NTPUDPClient();
InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
TimeInfo timeInfo = timeClient.getTime(inetAddress);
long returnTime = timeInfo.getReturnTime();
Date time = new Date(returnTime);
long systemtime = System.currentTimeMillis();
timeInfo.computeDetails();
Date realdate = new Date(systemtime + timeInfo.getOffset());
System.out.println("Time from " + TIME_SERVER + ": " + time);
System.out.println("Time from " + TIME_SERVER + ": " + realdate);
System.out.println(""+time.getTime());
}
- 1. ¿Cómo hacer que iAd se vea globalmente en mi aplicación?
- 2. Obtenga el tiempo transcurrido desde el inicio de la aplicación
- 3. Reloj dinámico en java
- 4. ¿Cómo hacer que mi aplicación Java Swing sea una aplicación Cliente-Servidor?
- 5. cómo hacer que la aplicación web sea accesible desde https en java
- 6. ¿Cómo puedo hacer que mi aplicación sea secuenciable en C#?
- 7. ¿Hay alguna forma de hacer SharedPreferences global en toda mi aplicación de Android?
- 8. ¿Cómo ejecuto un archivo por lotes desde mi aplicación Java?
- 9. ¿Cómo puedo hacer que mi aplicación .NET se borre sola?
- 10. ¿Hay algún IDE en línea para Java?
- 11. ¿Cómo puedo hacer que mi aplicación web J2EE trabaje fuera de línea?
- 12. cómo obtener un reloj de tiempo real en C#?
- 13. Aplicación de reloj despertador en .Net
- 14. Obtenga tiempo en incrementos de 1 ms
- 15. Cómo hacer que mi aplicación copie el archivo más rápido
- 16. ¿Cómo hacer que mi aplicación .NET en ejecución pueda recibir comandos mientras se está ejecutando?
- 17. ¿Qué podría hacer que Double Buffering matara mi aplicación?
- 18. ¿Cómo hacer que mi aplicación Java sea escalable y tolerante a errores?
- 19. Global ASAX: obtenga el nombre del servidor
- 20. ejecutar la aplicación de línea de comando interactiva desde java
- 21. Acceso global en Java
- 22. Cursor de ocultación global (desde la aplicación de fondo)
- 23. ¿Cómo puedo hacer un JAR desde .java
- 24. Generando un identificador global único en Java
- 25. ¿Abrir la aplicación iPod desde mi aplicación?
- 26. muestra un reloj de tiempo en la línea de comandos R
- 27. ¿Cómo puedo hacer que una aplicación Java se actualice automáticamente?
- 28. Reloj preciso en Erlang
- 29. ¿Cómo hacer "ping" desde la aplicación Node.js?
- 30. ¿Cómo hacer que la aplicación Java sea independiente?
En respuesta a la gente en las respuestas de esta manera es una especie de inútil. Realmente no está claro exactamente qué es lo que dices que es "verdad" aquí, y sin saber eso, todo lo que queda es el bloque de código sin explicación. –