1. Wechsel von Date
Klasse zu Calendar
Klasse
Programmierer liebten den Date
Kurs wegen seiner Einfachheit und Unterstützung für Unix-Standards, aber wie Sie wissen, hat jede Rose ihre Dornen.
Programmierer wollten eine „intelligente“ Date
Klasse. Und sie bekamen, was sie wollten, in Form der Calendar
Klasse. Es wurde als eine Möglichkeit konzipiert, nicht nur Daten zu speichern, sondern auch schwierige Operationen mit Daten durchzuführen.
Der vollständige Name der Calendar
Klasse lautet java.util.Calendar. Vergessen Sie nicht, es einer Importanweisung hinzuzufügen, wenn Sie es in Ihrem Code verwenden möchten.
Mit diesem Befehl können Sie ein Calendar
Objekt erstellen:
Calendar date = Calendar.getInstance();
Die statische getInstance()
Methode der Calendar
Klasse erstellt ein Calendar
Objekt, das mit dem aktuellen Datum initialisiert wird. Der gewünschte Kalender wird basierend auf den Einstellungen des Computers erstellt, auf dem das Programm ausgeführt wird.
Oder genauer gesagt, der Kalender, den Sie erhalten ... Das liegt daran, dass die Menschen auf der Erde nicht auf einen einzigen Kalender beschränkt sind. Stattdessen verwenden sie viele. Und fast jeder von ihnen ist mit einer Religion oder einem Land verbunden. Die Calendar
Klasse unterstützt drei davon:
Kalender | Beschreibung |
---|---|
Gregorianischer Kalender | Christlicher gregorianischer Kalender |
Buddhistischer Kalender | Buddhistischer Kalender |
Japanischer Kaiserkalender | Japanischer Kaiserkalender |
Es gibt aber auch chinesische und arabische Kalender. Grundsätzlich ist der Umgang mit der Zeit nicht so einfach, wie es scheint.
Im chinesischen Kalender ist das Jahr zum Zeitpunkt des Schreibens dieser Lektion offiziell 4716. Und nach dem muslimischen Kalender ist das Jahr 1398. Willkommen in der großen Welt, mein Programmiererfreund.
2. Erstellen eines Kalenderobjekts
Wir werden den gregorianischen Kalender verwenden, da dieser der gebräuchlichste auf der Welt ist. Zumindest bis China Oracle kauft und den chinesischen Kalender zum Hauptkalender macht.
Mit einer Anweisung wie dieser können Sie ein Kalenderobjekt mit einem beliebigen Datum erstellen:
Calendar date = new GregorianCalendar(year, month, day);
Ja, man muss GregorianCalendar
jedes Mal schreiben. Statt Calendar
können Sie auch schreiben GregorianCalendar
– das geht auch. Aber Schreiben Calendar
ist einfach kürzer.
Das Jahr muss vollständig angegeben werden, z. B. kann man nicht 19 statt 2019 schreiben. Monate werden weiterhin von Null an nummeriert. Aber wie bisher werden die Tage des Monats nicht von Null an nummeriert. Nerds!
Um sowohl die Uhrzeit als auch das Datum festzulegen, müssen Sie die Uhrzeit als zusätzliche Argumente übergeben:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Bei Bedarf können Sie sogar Millisekunden eingeben. Sie sind der Parameter nach der Anzahl der Sekunden.
3. Anzeigen eines Kalenderobjekts auf dem Bildschirm
Wenn Sie ein Kalenderobjekt einfach auf dem Bildschirm ausdrucken, werden Sie mit dem Ergebnis nicht sehr zufrieden sein.
Code |
---|
|
Konsolenausgabe |
|
Dabei ist zu beachten, dass ein Kalender ein Kalender und kein Datum ist : Er verfügt über alle möglichen Einstellungen, die alle auf dem Bildschirm angezeigt werden.
Es wäre angemessen, ein SimpleDateFormat
Objekt zum Anzeigen eines Kalenders zu verwenden, aber bis wir es studiert haben, können Sie diesen Life-Hack verwenden.
Date date = calendar.getTime();
Ein Calendar
Objekt kann einfach in ein Objekt umgewandelt werden , und Sie wissen bereits, wie ein Objekt Date
angezeigt wird . Sie können Code wie diesen verwenden, um ein Objekt in Folgendes Date
umzuwandeln :Calendar
Date
Verwendung der getTime()
Methode:
Code | Konsolenausgabe |
---|---|
|
|
Das ist eine ganz andere Sache, nicht wahr?
4. Arbeiten mit Elementen eines Datums
Um ein bestimmtes Element eines Datums (z. B. Jahr, Monat, ...) zu erhalten, Calendar
verfügt die Klasse über die get()
Methode. Es ist eine einzelne Methode, aber sie hat Parameter:
int month = calendar.get(Calendar.MONTH);
Wo calendar
ist eine Calendar
Variable und MONTH
ein konstantes Feld der Calendar
Klasse?
Sie übergeben der Methode eines der Calendar
Konstantenfelder der Klasse als Argument get
und erhalten als Ergebnis den gewünschten Wert.
Beispiele
Code | Beschreibung |
---|---|
|
Ära (vor oder nach der gemeinsamen Ära) Jahr Monat Tag des Monats Tag der Woche Stunden Minuten Sekunden |
Um ein Element eines Datums zu ändern, verwenden Sie die set
Methode:
calendar.set(Calendar.MONTH, value);
Wo calendar
ist eine Calendar
Variable und MONTH
ein konstantes Feld der Calendar
Klasse?
Wenn Sie mit set
der Methode arbeiten, übergeben Sie eines der Calendar
konstanten Felder der Klasse als erstes Argument und den neuen Wert als zweites Argument.
Beispiele
Code | Beschreibung |
---|---|
|
Jahr = 2019 Monat = Juli (nummeriert von 0) 4. Tag Stunden Minuten Sekunden |
5. Konstanten der Calendar
Klasse
Die konstanten Felder der Calendar
Klasse sind nicht auf die Benennung von Elementen eines Datums beschränkt. Es scheint Felder für jeden Anlass zu geben.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Es gibt beispielsweise konstante Felder, die sich auf Monate beziehen:
Und auch die Wochentage:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Wir werden nicht alles auflisten. Wir möchten nur nicht, dass Sie überrascht sind, wenn Sie solche Konstanten im Code sehen.
Durch die Verwendung von Konstanten wird der Code besser lesbar, weshalb die Programmierer sie verwenden. Um die Lesbarkeit zu verbessern, werden die Monate ebenfalls von Null an nummeriert. Oder nicht.
6. Ändern des Datums in einem Calendar
Objekt
Die Calendar
Klasse verfügt über eine Methode, mit der Sie ein Datum auf intelligentere Weise bearbeiten können. Beispielsweise können Sie einem Datum ein Jahr, einen Monat oder mehrere Tage hinzufügen. Oder nimm sie weg. Diese Methode heißt add()
. Die Arbeit damit sieht so aus:
calendar.add(Calendar.MONTH, value);
Wo calendar
ist eine Calendar
Variable und MONTH
ein konstantes Feld der Calendar
Klasse?
Wenn Sie mit add
der Methode arbeiten, übergeben Sie als erstes Argument eines der Calendar
Konstantenfelder der Klasse und als zweites Argument den neu hinzuzufügenden Wert.
Dies ist eine weitere intelligente Methode. Mal sehen, wie intelligent es ist:
Code |
---|
|
Konsolenausgabe |
|
Diese Methode geht davon aus, dass der Februar 2019 nur 28 Tage hat, sodass das resultierende Datum der 1. März ist.
Nehmen wir uns jetzt 2 Monate Zeit! Was sollen wir bekommen? 27. Dezember 2018! Schauen wir uns das jetzt an.
Um eine Operation auszuführen, die zu einem früheren Datum führt, müssen Sie der add()
Methode einen negativen Wert übergeben:
Code |
---|
|
Konsolenausgabe |
|
Es klappt!
Diese Methode berücksichtigt die unterschiedliche Länge von Monaten und Schaltjahren. Alles in allem eine tolle Methode. Es ist genau das, was die meisten Programmierer, die mit Datumsangaben arbeiten, brauchen.
7. Rollelemente eines Datums
Aber manchmal gibt es Situationen, in denen wir dieses kluge Verhalten nicht wollen, z. B. wenn Sie etwas an einem Teil des Datums ändern möchten, ohne alles andere zu ändern.
Die Klasse verfügt hierfür Calendar
über die spezielle Methode. roll()
Seine Signatur ist genau wie die add()
Methode, aber diese Methode ändert nur ein Element des Datums und lässt den Rest unverändert.
Beispiel:
Code |
---|
|
Konsolenausgabe |
|
Wir haben den Monat geändert, aber das Jahr und das Datum blieben unverändert.
GO TO FULL VERSION