wake-up-neo.com

Java - Wie erhält man das aktuelle Datum unabhängig vom Systemdatum?

Ich möchte das aktuelle Datum und die aktuelle Uhrzeit erfahren.

Der Code

Calendar.getInstance();

stellt ein Datum und eine Uhrzeit des Systems dar, auf dem das Programm ausgeführt wird, und das Systemdatum kann falsch sein.

Gibt es eine Möglichkeit, wie ich das aktuelle Datum und die Uhrzeit korrekt abrufen kann, unabhängig von Datum und Uhrzeit des Systems, auf dem das Programm läuft?

17
Yatendra Goel

Wenn Sie im Internet sind, können Sie möglicherweise eine bekannte und vertrauenswürdige Zeitquelle fragen. Wenn die Person, die Ihr Programm ausführt, verhindern möchte, dass Ihr Programm dies tut (z. B. wenn Sie ihnen eine zeitlich begrenzte Lizenz erteilt haben und sie nicht mehr Zeit bezahlen möchten), kann sie diese Verbindung fälschen oder blockieren.

Bei einem Projekt, bei dem ich gerade war, haben wir eine sichere, vertrauenswürdige Zeitquelle in die Hardware eingefügt, die nicht manipuliert werden konnte. Es wurde für Verschlüsselung und Lizenzierung entwickelt und verfügte über eine Java-Bibliothek, um darauf zuzugreifen. Sorry, ich kann mich nicht an den Namen des Geräts erinnern.

Die Antwort lautet also vielleicht ja, vielleicht nein.

4
Paul Tomblin

In Java-Versionen vor 1.1 war es üblich, die Klasse Date zu verwenden:

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

In neueren Versionen von Java wurde jedoch ein Großteil der Klasse Date nicht mehr unterstützt (insbesondere die Methode getYear). Es ist jetzt üblicher, die Klasse Calendar zu verwenden:

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

Ich kann deine Frage nicht ganz verstehen, aber ich kann deinen Titel beantworten:

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

Haben Sie ein Internet-System? Wenn ja, können Sie die Synchronisierung mit genauen Zeitdiensten verwenden (zum Beispiel: http://tldp.org/HOWTO/TimePrecision-HOWTO/ntp.html ) und das Gewünschte gewähren.

3
Dewfy

Hier finden Sie Code zum Abrufen des Datums im HTTP-Format (normalerweise UTC-Zeitzone) von einem Webserver Ihrer Wahl.

Wenn Sie keine Kontrolle über die physische Hardware und das Betriebssystem haben, kann natürlich nicht garantiert werden, dass Sie mit dem Webserver sprechen können, nach dem Sie fragen ...

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));
  }

}
0
Cosimo

Die Methoden auf Programmierebene werden entwickelt, um Datum und Uhrzeit von Ihrem System selbst abzurufen. Sie können sie nicht ändern, um Datumsangaben zu erhalten, außer dem angegebenen System.

Wenn Sie dies wünschen, benötigen Sie für Ihre zusätzliche Anforderung eine Synchronisierung zwischen Ihrem Client-Computer und dem Server.

0
Mr.Expert