2010-05-23 18 views
17

Quiero saber la fecha y hora actuales.Java - ¿Cómo obtener la fecha actual independiente de la fecha del sistema?

El código

Calendar.getInstance(); 

representa una fecha y la hora del sistema en el que se ejecuta el programa y la fecha del sistema puede estar equivocada.

Entonces, ¿hay alguna forma de obtener la fecha y la hora correctas independientemente de la fecha y hora del sistema en el que se está ejecutando el programa?

+2

La fecha es relativa ... No existe la "fecha actual correcta", a menos que se refiera a una zona horaria específica. –

+0

bien ... ¿cómo puedo obtener la fecha y hora correctas de una zona horaria en particular? –

+0

Tiene que comenzar con la fecha y hora de su sistema actual, ¿está bien? – Mark

Respuesta

4

Si está en Internet, es posible que pueda solicitar una fuente de tiempo conocida y confiable. Si la persona que ejecuta su programa quiere evitar que su programa lo haga (como si les hubiera otorgado una licencia de tiempo limitado y no quisieran pagar por más tiempo), podrían falsificar o bloquear esa conexión.

En un proyecto en el que estaba conectado, colocamos una fuente de tiempo segura y confiable en el hardware que no se podía alterar. Fue diseñado para cifrado y licenciamiento, y tenía una biblioteca Java para acceder a él. Lo siento, no puedo recordar el nombre del dispositivo.

Así que la respuesta es tal vez sí, tal vez no.

0

Los métodos de nivel de programación están desarrollados para Obtener fecha y hora de su sistema. No puede modificarlos para obtener las fechas excepto que el Sistema especificado.

Para su requerimiento adicional, si realmente desea tenerlo, requerirá una Sincronización entre su Máquina Cliente y el Servidor.

7

No entiendo por completo su pregunta, pero puedo responder a su título:

GregorianCalendar gc = new GregorianCalendar(System.getCurrentTimeMillis()); 
int year = gc.get(Calendar.YEAR); 
39

En versiones de Java anteriores a 1.1 que era estándar para usar la clase Date:

Date now = new Date();  // Gets the current date and time 
int year = now.getYear(); // Returns the # of years since 1900 

Sin embargo En las versiones más nuevas de Java, gran parte de la clase Date ha quedado obsoleta (específicamente el método getYear). Ahora es más estándar a utilizar la clase Calendar:

Calendar now = Calendar.getInstance(); // Gets the current date and time 
int year = now.get(Calendar.YEAR);  // The current year 
+4

Wow, 29 upvotes y no responde la pregunta, que específicamente preguntó cómo obtener la fecha real cuando el reloj del sistema está equivocado. –

+0

@Paul Tomblin El título original de esta pregunta fue "Java - ¿Cómo obtener el año actual?" que no coincide con la pregunta real. Modificado eso. – ltlBeBoy

+0

@ltlBeBoy Supongo que es demasiado esperar que los que responden las preguntas y los que votan por encima lean más que el título. –

0

Aquí hay algo de código a buscar a la fecha en formato HTTP (normalmente zona UTC) de un servidor web de su elección.

Por supuesto, si no tiene control sobre el hardware físico y el sistema operativo, nada puede garantizar que podrá hablar con el servidor web real que solicite ... pero de todos modos.

package some.package; 

import java.io.IOException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.List; 
import java.util.Map; 

public class Test { 

    private static String getServerHttpDate(String serverUrl) throws IOException { 
    URL url = new URL(serverUrl); 
    URLConnection connection = url.openConnection(); 

    Map<String, List<String>> httpHeaders = connection.getHeaderFields(); 

    for (Map.Entry<String, List<String>> entry : httpHeaders.entrySet()) { 
     String headerName = entry.getKey(); 
     if (headerName != null && headerName.equalsIgnoreCase("date")) { 
     return entry.getValue().get(0); 
     } 
    } 
    return null; 
    } 

    public static void main(String[] args) throws IOException { 
    String serverUrl = args.length > 0 ? args[0] : "https://google.com"; 
    System.out.println(getServerHttpDate(serverUrl)); 
    } 

} 
Cuestiones relacionadas