Holen Sie sich das aktuelle Datum vor Java 8

1. Einleitung

In Legacy-Systemen müssen wir möglicherweise mit Datumsangaben arbeiten, wenn weder die neue Datums- und Uhrzeit-API noch die dringend empfohlene Joda-Time-Bibliothek verfügbar sind.

In diesem kurzen Tutorial werden wir uns verschiedene Ansätze ansehen , um zu sehen, wie das aktuelle Datum in Systemen vor Java 8 ermittelt wird .

2. Systemzeit

Wenn wir nur einen einzigen numerischen Wert benötigen, der das aktuelle Datum und die aktuelle Uhrzeit darstellt, können wir die Systemzeit verwenden. Um die Anzahl der seit dem 1. Januar 1970 00:00:00 GMT verstrichenen Millisekunden zu ermitteln , können wir die currentTimeMillis- Methode verwenden, die eine lange Rückgabe liefert :

long elapsedMilliseconds = System.currentTimeMillis();

Wenn wir die verstrichene Zeit genauer messen möchten, können wir die nanoTime- Methode verwenden. Dies gibt den Wert von Nanosekunden zurück, die von einem festen, aber willkürlichen Moment vergangen sind.

Diese willkürliche Zeit ist für alle Aufrufe innerhalb der JVM gleich, daher ist der zurückgegebene Wert nur nützlich, um die Differenz der verstrichenen Nanosekunden zwischen mehreren Aufrufen von nanoTime zu berechnen :

long elapsedNanosecondsStart = System.nanoTime(); long elapsedNanoseconds = System.nanoTime() - elapsedNanosecondsStart;

3. Das java.util- Paket

Mit Klassen aus dem Paket java.util können wir einen Zeitpunkt darstellen, normalerweise in Millisekunden, die seit dem 1. Januar 1970 seit 00:00:00 GMT vergangen sind .

3.1. java.util.Date

Wir können ein bestimmtes Datum und eine bestimmte Uhrzeit mithilfe eines Datumsobjekts darstellen . Diese enthält eine Genauigkeit von Millisekunden und die Zeitzoneninformationen .

Obwohl viele Konstruktoren verfügbar sind, können Sie am einfachsten ein Datumsobjekt erstellen, das das aktuelle Datum in der lokalen Zeitzone darstellt, indem Sie den Basiskonstruktor verwenden:

Date currentUtilDate = new Date();

Lassen Sie uns nun ein Datumsobjekt für ein bestimmtes Datum und eine bestimmte Uhrzeit erstellen . Wir könnten die oben genannten Konstruktoren verwenden und einfach den Millisekundenwert übergeben.

Alternativ können wir die SimpleDateFormat- Klasse verwenden, um einen String- Wert in ein tatsächliches Date- Objekt zu konvertieren :

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); Date customUtilDate = dateFormatter.parse("30-01-2020 10:11:12");

Wir können eine Vielzahl von Datumsmustern verwenden, um unseren Anforderungen gerecht zu werden.

3.2. java.util.Calendar

Ein Kalenderobjekt kann das tun, was ein Datum tut, und es ist besser für Datumsarithmetikberechnungen, da es auch ein Gebietsschema annehmen kann . Wir können das Gebietsschema als geografische, politische oder kulturelle Region angeben .

Um das aktuelle Datum ohne Angabe von Zeitzone oder Gebietsschema abzurufen, können Sie die Methode getInstance verwenden:

Calendar currentUtilCalendar = Calendar.getInstance();

Und für die Konvertierung von Kalender zu Datum können wir einfach die getTime- Methode verwenden:

Date currentDate = Calendar.getInstance().getTime();

Die GregorianCalendar- Klasse ist die Implementierung des weltweit am häufigsten verwendeten Kalenders.

4. Das java.sql- Paket

Als Nächstes werden drei Erweiterungen der Klasse java.util.Date untersucht , die die entsprechenden SQL-Objekte darstellen.

4.1. java.sql.Date

Mit einem java.sql.Date- Objekt haben wir keinen Zugriff auf Zeitzoneninformationen, und die Genauigkeit wird auf Tagesebene abgeschnitten . Um heute darzustellen, können wir den Konstruktor verwenden, der eine lange Darstellung von Millisekunden benötigt:

Date currentSqlDate = new Date(System.currentTimeMillis());

Nach wie vor können wir für ein bestimmtes Datum die SimpleDateFormat- Klasse verwenden, um zuerst in eine java.util.Date zu konvertieren und dann die Millisekunden mit der getTime- Methode abzurufen . Dann können wir diesen Wert an den Konstruktor java.sql.Date übergeben .

Wir können einfach die Verwendung valueOf Methode , wenn der String Darstellung eines Datums der Spiele YYYY- [m] m- [d] d Muster:

Date customSqlDate = Date.valueOf("2020-01-30");

4.2. java.sql.Time

Das Objekt java.sql.Time bietet Zugriff auf die Stunden-, Minuten- und Sekundeninformationen - wiederum ohne Zugriff auf eine Zeitzone. Lassen Sie uns die aktuelle Zeit mithilfe der Millisekunden-Darstellung ermitteln:

Time currentSqlTime = new Time(System.currentTimeMillis());

Um eine Zeit mit der valueOf- Methode anzugeben , können wir einen Wert übergeben, der dem Muster hh: mm: ss entspricht :

Time customSqlTime = Time.valueOf("10:11:12");

4.3. java.sql.Timestamp

In diesem letzten Abschnitt werden die SQL- Datums- und Uhrzeitinformationen mithilfe der Timestamp- Klasse kombiniert . Dies ermöglicht uns eine Genauigkeit von bis zu Nanosekunden .

Erstellen Sie ein Zeitstempelobjekt , indem Sie dem Konstruktor erneut einen langen Wert für die aktuelle Anzahl von Millisekunden übergeben:

Timestamp currentSqlTimestamp = new Timestamp(System.currentTimeMillis());

Zuletzt erstellen wir einen neuen benutzerdefinierten Zeitstempel mit der valueOf- Methode mit dem erforderlichen Muster yyyy- [m] m- [d] d hh: mm: ss [.f…] :

Timestamp customSqlTimestamp = Timestamp.valueOf("2020-1-30 10:11:12.123456789");

5. Schlussfolgerung

In diesem kurzen Tutorial haben wir gesehen, wie Sie das aktuelle Datum und das Datum für einen bestimmten Zeitpunkt ohne Verwendung von Java 8 oder externen Bibliotheken abrufen können.

Wie immer ist der Code für den Artikel auf GitHub verfügbar.