1. Wechsel von DateKlasse zu CalendarKlasse
Programmierer liebten den DateKurs wegen seiner Einfachheit und Unterstützung für Unix-Standards, aber wie Sie wissen, hat jede Rose ihre Dornen.
Programmierer wollten eine „intelligente“ DateKlasse. Und sie bekamen, was sie wollten, in Form der CalendarKlasse. 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 CalendarKlasse 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 CalendarObjekt erstellen:
Calendar date = Calendar.getInstance();
Die statische getInstance()Methode der CalendarKlasse erstellt ein CalendarObjekt, 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 CalendarKlasse 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 GregorianCalendarjedes Mal schreiben. Statt Calendarkönnen Sie auch schreiben GregorianCalendar– das geht auch. Aber Schreiben Calendarist 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 SimpleDateFormatObjekt zum Anzeigen eines Kalenders zu verwenden, aber bis wir es studiert haben, können Sie diesen Life-Hack verwenden.
Date date = calendar.getTime();
Ein CalendarObjekt kann einfach in ein Objekt umgewandelt werden , und Sie wissen bereits, wie ein Objekt Dateangezeigt wird . Sie können Code wie diesen verwenden, um ein Objekt in Folgendes Dateumzuwandeln :CalendarDate
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, Calendarverfügt die Klasse über die get()Methode. Es ist eine einzelne Methode, aber sie hat Parameter:
int month = calendar.get(Calendar.MONTH);
Wo calendarist eine CalendarVariable und MONTHein konstantes Feld der CalendarKlasse?
Sie übergeben der Methode eines der CalendarKonstantenfelder der Klasse als Argument getund 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 setMethode:
calendar.set(Calendar.MONTH, value);
Wo calendarist eine CalendarVariable und MONTHein konstantes Feld der CalendarKlasse?
Wenn Sie mit setder Methode arbeiten, übergeben Sie eines der Calendarkonstanten 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 CalendarKlasse
Die konstanten Felder der CalendarKlasse 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 CalendarObjekt
Die CalendarKlasse 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 calendarist eine CalendarVariable und MONTHein konstantes Feld der CalendarKlasse?
Wenn Sie mit addder Methode arbeiten, übergeben Sie als erstes Argument eines der CalendarKonstantenfelder 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