Datum & Uhrzeit der Klasse Calendar im Java Programm nutzen: So gehts
Datum und Uhrzeit mit Java. – Wie geht das?
Es gibt verschiedene Möglichkeiten das Datum und auch die Uhrzeit in Java darzustellen.
Eine Möglichkeit bietet die Java Klasse Calendar.
Lass uns einmal einen Blick hinein werfen.
Inhalt
- 1 Die Java Klasse Calendar findest du in den API Docs.
- 1.1 So erstellst du Objekte der Java Klasse Calendar
- 1.2 Objekte der Java Klasse Calendar am Beispiel
- 1.3 So kannst du dir die Uhrzeit und das Datum anzeigen lassen.
- 1.4 So kannst du die Uhrzeit und das Datum zwischenspeichern.
- 1.5 Eine zweite Möglichkeit sich das Datum und die Uhrzeit anzeigen zu lassen….
- 2 Die Java Klasse Calendar und ihre Konstanten.
- 3 Hier ist der Überblick zu den wichtigsten Konstanten und Felder der Java Klasse Calendar
- 3.1 ERA zur Berechnung der Zeitrechnung
- 3.2 YEAR zur Berechnung des Java Jahres
- 3.3 MONTH zur Darstellung des Monats in Java
- 3.4 WEEK_OF_YEAR nutzt du zur Darstellung der Kalenderwoche mit Java
- 3.5 WEEK_OF_MONTH nutzt du zur Darstellung der Woche des Monats.
- 3.6 DAY_OF_MONTH liefert den aktuellen Tag des Monats.
- 3.7 DAY_OF_YEAR zur Darstellung des aktuellen Tages in Java
- 3.8 DAY_OF_WEEK zur Ermittlung des Wochentages durch Java
- 3.9 DAY_OF_WEEK_IN_MONTH zur Ermittlung der Anzahl der Wochentage
- 3.10 HOUR berechnet die aktuelle Stunde in Java.
- 3.11 HOUR_OF_DAY berechnet die deutsche Stunde mit Java.
- 3.12 MINUTE zur Darstellung der Minuten in Java
- 3.13 SECOND benötigst du, um die Sekunden mit Java darzustellen
- 3.14 MILLISECOND zur Berechnung der Millisekunden mit Java
- 3.15 AM_PM zur Unterscheidung zwischen Früh und Nachmittag
- 4 Wenn du Datum und Uhrzeit in einer vernünftigen Bildschirmausgabe verknüpfen willst….
- 5 Zusammenfassung:
Die Java Klasse Calendar findest du in den API Docs.
Wie sämtliche anderen Klassen auch, gehört die Klasse Calendar zur Standardbibliothek von Java.
Öffne einmal die Java API DOCS.
Links, in der Seitenleiste, kannst du die Klasse Calendar finden, wählen und anklicken.
Schließlich gelangst du in die Klassendokumentation des Java Calendar.
Was sofort auffällt – Die Klasse ist abstract.
Somit kannst du, keine Instanzen dieser Klasse erstellen.
Was heißt das jetzt genau?
Der normale Weg besteht darin, Java Objekte per Konstruktoraufruf zu erstellen.
Wie du selbst siehst, kannst du dir den Konstruktor sparen.
Es funktioniert nicht.
Aber wenn du eine Uhrzeit oder ein Datum mit dem Java Calendar darstellen möchtest, brauchst du Objekte.
Also was soll das?
So erstellst du Objekte der Java Klasse Calendar
Ich habe dir in einem anderen Beitrag schon einmal gezeigt, wie du mit Java Methoden Objekte erstellst.
Die Klasse Calendar bietet ebenfalls so eine Methode an.
Und zwar liefert die Methode „getInstanze()“ ein Objekt zurück.
Im Klartext heißt das:
„Der Rückgabewert dieser Methode ist ein Calendar-Objekt.“
Doch….
Am Besten ist es, ich zeige es dir einmal am Beispiel.
Objekte der Java Klasse Calendar am Beispiel
Ich erstelle dazu eine neue Klasse, namens „CalendarDemo“.
public class CalendarDemo {
}
Diese Klasse soll gleichzeitig ein komplett ausführbares Java Programm sein.
Und deshalb musst du die main-Methode in die Klasse implementieren.
public class CalendarDemo {
public static void main(String[] args) {
}
}
Jetzt kannst du Objekte der Klasse Calendar anlegen.
Und zwar über die Klassenmethode „getInstance()“.
Beachte dabei, dass Klassenmethoden immer am Klassennamen aufgerufen werden.
Die Rückgabewerte speicherst du dann in Variablen – zum Beispiel „heute“ und „jetzt“ – ab.
Und schließlich hast du dann komplett funktionsfähige Calendar-Objekte.
import java.util.Calendar;//Importanweisung für den Calendar
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();//erstes Objekt der Klasse Calendar
Calendar heute = Calendar.getInstance();//zweites Objekt der Klasse Calendar
}
}
Bis hierhin Alles klar?
Dann machen wir weiter.
So kannst du dir die Uhrzeit und das Datum anzeigen lassen.
In den API Docs zur Java Klasse Calendar, findest du auch die entsprechenden Dokumentation zu den Calendar-Methoden.
Du siehst die entsprechenden Rückgabewerte?
Jetzt lass uns mal die „get-Time“ Methode an einem Objekt aufrufen.
In den API Docs steht ein Date-Objekt als Rückgabewert.
Hier wäre der Java Code, wenn du den Rückgabewert – direkt in die Konsolenausgabe (System.out…) einbettest.
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
System.out.println(jetzt.getTime());//Aufruf der getTime-Methode, innerhalb der System-Anweisung
}
}
Führe den Code jetzt einmal aus und drücke dazu RUN.
Es sollte dann das aktuelle Datum und die aktuelle Uhrzeit auf der Konsole erscheinen.
Und läuft?
So kannst du die Uhrzeit und das Datum zwischenspeichern.
Bisher hast du die Zeit nur als Konsolenausgabe.
Es kann aber vorkommen, dass du diese nochmal an anderer Stelle benötigst.
Dann solltest du diese Werte speichern können.
Schauen wir uns den Methodenaufruf der „getTime()“ Methode nochmal an.
Ich schrieb bereits, dass die „getTime()-Methode“ ein Date-Objekt zurückgibt.
Und natürlich musst du dieses Date-Objekt dann auch in einer entsprechenden Variablen, vom Typ Date speichern.
Ich nenne diese Variable „datumUndZeit“.
Beachte bitte, dass du auch für Date-Objekte eine Importanweisung benötigst.
So sieht es dann im Code aus:
import java.util.Calendar;
import java.util.Date;//Importanweisung Date
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
Date datumUndZeit = jetzt.getTime();//Rückgabewert wird in einem Date-Objekt gespeichert
System.out.println(datumUndZeit);//Ausgabe nur zur Überprüfung
}
}
Eine zweite Möglichkeit sich das Datum und die Uhrzeit anzeigen zu lassen….
In den API Docs wird noch eine zweite Methode angeführt.
Und zwar die Methode „getTimeInMillis()“.
Wie du im Bild siehst, liefert diese einen Long-Wert als Rückgabe.
Falls du diesen zwischenspeichern möchtest, müsstest du eine entsprechende Variable anlegen.
So würde der Methodenaufruf im Java Code aussehen:
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
System.out.println(jetzt.getTime());//Ausgabe des Datums und der Uhrzeit
System.out.println(jetzt.getTimeInMillis());//Ausgabe in Millisekunden seit 01.01.1970
}
}
Bei mir im Beispiel ergibt sich:
das Datum 30.10.2017 mit einer Uhrzeit von 9:22 Uhr.
Und verstrichenen Millisekunden von 1509351776894.
Was heißen diese Millisekunden?
Jeder Computer rechnet ab dem Jahr 1970.
Und seit dem 01.01.1970 um 0:00 Uhr sind 1.509.351.776.894 Millisekunden verstrichen.
Krass oder?
Mitunter kennst du dieses Phänomen auch schon von anderen Computerprogrammen, wie zum Beispiel Excel.
Gib in Excel in einer Zelle die Zahl 1 ein.
Dann ändere das Excel-Format von Standard auf Datum.
BÄÄM, schon siehst du den Anbeginn der Computerzeitrechnung.
Wenn du dann eine 2 im selben Feld (Excel-Zelle) eingibst, verändert sich das Datum.
Aus dem 01.01.1970 wird der 02.01.1970.
Hier wird es nicht ganz deutlich…
Aber Excel rechnet intern weiterhin mit Millisekunden.
Für den User wird die Zeitrechnung nur angenehmer dargestellt.
Somit wird jede eingegebene Zahl automatisch mit: 86.400.000 multipliziert.
Das Programm rechnet automatisch von Millisekunden in Tage um.
Und schon ist der Excel-User automatisch auf der Tagesebene.
Aber beenden wir den Excel-Ausflug.
Du solltest nur wissen:
„Jedes Datum am Computer beginnt am 01.01.1970.
Seitdem misst der Computer die verstrichenen Millisekunden und berechnet daraus Uhrzeit und Datum.“
Die Java Klasse Calendar und ihre Konstanten.
Werfen wir noch einen letzter Blick in die API Docs.
Weiter unten stehen die Felder der Klasse Calendar.
Schau dir einmal das Feld „DAY_OF_MONTH“ an.
An der Schreibweise erkennst du, dass es sich um eine Konstante handelt.
Außerdem steht in der Beschreibung, dass du nur über die getter- und setter-Methoden an diese Konstante herankommst.
Du musst somit den getter zur „DAY_OF_MONTH-Konstante“ aufrufen, um den Rückgabewert der Methode zu bekommen.
Und so geht’s.
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
//Aufruf der getter-Methoden und Einbettung in die System.out.println()-Anweisung
System.out.println(jetzt.get(Calendar.DAY_OF_MONTH));//Aktueller Tag des Monats
}
}
Wenn du jetzt auf RUN klickst, erscheint der aktuelle Tag.
In der Klasse befinden sich aber noch weitere Variablen.
Hier ist ein Überblick zu den Wichtigsten für das Java Datum:
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
System.out.println(jetzt.get(Calendar.DAY_OF_MONTH));//Bei mir 30 für 30.10.2017
System.out.println(jetzt.get(Calendar.DAY_OF_YEAR));//Aktuelle Tag des Jahres - Bei mir 303
System.out.println(jetzt.get(Calendar.WEEK_OF_YEAR));//Kalenderwoche 44
System.out.println(jetzt.get(Calendar.MONTH)+1);//aktueller Monat bei mir 10
System.out.println(jetzt.get(Calendar.YEAR));//aktuelles Jahr bei mir 2017
}
}
Und die wichtigsten zur Java Uhrzeit:
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
System.out.println(jetzt.get(Calendar.HOUR_OF_DAY));//Stunde des Tages 24-er Zyklus
System.out.println(jetzt.get(Calendar.HOUR));//Stunde des Tages 12-er Zyklus
System.out.println(jetzt.get(Calendar.AM_PM));//0= vor 12 ; 1 = nach 12
System.out.println(jetzt.get(Calendar.MINUTE));//Aktuelle Minute
System.out.println((jetzt.get(Calendar.SECOND)));//Aktuelle Senkunden
}
}
Hier ist der Überblick zu den wichtigsten Konstanten und Felder der Java Klasse Calendar
ERA zur Berechnung der Zeitrechnung
Diese Konstante zeigt an, in welcher Zeitära du bist.
Also ob du dich vor Christus oder nach Christus befindest.
- Minimalwert: 0
- Maximalwert: 1
- Erläuterung: 0 (BC) = vor Christus, 1 (AD) = nach Christus
System.out.println(jetzt.get(Calendar.ERA));
YEAR zur Berechnung des Java Jahres
Diese Konstante habe ich dir schon gezeigt.
Sie liefert das aktuelle Jahr im Beispiel oben.
- Minimalwert: 1
- Maximalwert: unendlich bis zur letzten darstellbaren long-Zahl
- Erläuterung: aktuelles Jahr
System.out.println(jetzt.get(Calendar.YEAR));
MONTH zur Darstellung des Monats in Java
Auch dieses Feld habe ich dir oben schon gezeigt.
Sie liefert den aktuellen Monat.
Da die Monate von 0 bis 11 gespeichert werden, musst du immer Eins hinzu addieren.
- Minimalwert: 0
- Maximalwert: 11
- Erläuterung: aktueller Monat
System.out.println(jetzt.get(Calendar.MONTH)+1);
WEEK_OF_YEAR nutzt du zur Darstellung der Kalenderwoche mit Java
Die Kalenderwochen beginnen bei 1 und enden bei 54.
- Minimalwert: 1
- Maximalwert: 54
- Erläuterung: aktueller Kalenderwoche
System.out.println(jetzt.get(Calendar.WEEK_OF_YEAR);
WEEK_OF_MONTH nutzt du zur Darstellung der Woche des Monats.
Hier werden die Wochen innerhalb eines Monats gezählt.
Die erste Woche im Monat beginnt mit eins.
Und der Monat hat vielleicht 5 Wochen.
Dann würde das Java Programm dir diese Wochennummer liefern.
- Minimalwert: 1
- Maximalwert: 6
- Erläuterung: aktueller Kalenderwoche
System.out.println(jetzt.get(Calendar.WEEK_OF_MONTH);
DAY_OF_MONTH liefert den aktuellen Tag des Monats.
Dies ist deine und meine übliche Zeitrechnung.
Wir sagen heute ist der 30 des Monats Oktober.
- Minimalwert: 1
- Maximalwert: 31
- Erläuterung: aktueller Tag
System.out.println(jetzt.get(Calendar.DAY_OF_MONTH);
DAY_OF_YEAR zur Darstellung des aktuellen Tages in Java
Dies ist etwas unüblich.
Aber wenn du wissen willst, dass der 30.10.2017 der 303. Tag im Jahr 2017 ist – dann benötigst du dieses Feld.
- Minimalwert: 1
- Maximalwert: 366
- Erläuterung: aktueller Tag des Jahres
System.out.println(jetzt.get(Calendar.DAY_OF_YEAR);
DAY_OF_WEEK zur Ermittlung des Wochentages durch Java
Zu beachten ist, dass die Java-Woche mit Sonntag beginnt und mit Samstag endet.
Deshalb ist Montag nicht 1, sondern 2.
- Minimalwert: 1
- Maximalwert: 7
- Erläuterung: aktueller Wochentag von Sonntag bis Samstag
System.out.println(jetzt.get(Calendar.DAY_OF_WEEK);
DAY_OF_WEEK_IN_MONTH zur Ermittlung der Anzahl der Wochentage
Dies ist eine Kombination:
- aus DAY_OF_WEEK, welche die Wochentage ausgibt.
- und WEEK_OF_MONTH, welche die Wochen innerhalb es Monats zählt.
Ausgegeben wird dann zum Beispiel – “ der-wie-vielte-Sonntag-im-Mai“.
- Minimalwert: 1
- Maximalwert: 6
- Erläuterung: aktueller Wochentag im Monat hochgezählt
System.out.println(jetzt.get(Calendar.DAY_OF_WEEK_IN_MONTH);
HOUR berechnet die aktuelle Stunde in Java.
Beachte, dass hier der 12-er Zyklus ausgegeben wird.
Also die amerikanische Uhrzeit mit AM und PM.
- Minimalwert: 0
- Maximalwert: 11
- Erläuterung: aktuelle Stunde 0:__ bis 11:__
System.out.println(jetzt.get(Calendar.HOUR);
HOUR_OF_DAY berechnet die deutsche Stunde mit Java.
Und zwar wird hier die Stundenanzahl in 24 Stunden Takt ausgegeben.
- Minimalwert: 0
- Maximalwert: 23
- Erläuterung: aktuelle Stunde 0:__ bis 23:__
System.out.println(jetzt.get(Calendar.HOUR_OF_DAY);
MINUTE zur Darstellung der Minuten in Java
Auch die Minutendarstellung haben wir am Beispiel schon vollzogen.
- Minimalwert: 0
- Maximalwert: 59
- Erläuterung: aktuelle Minute _:00 bis __:59
System.out.println(jetzt.get(Calendar.MINUTE);
SECOND benötigst du, um die Sekunden mit Java darzustellen
Hier ist nicht viel Erklärungsbedarf, oder?
- Minimalwert: 0
- Maximalwert: 59
- Erläuterung: aktuelle Sekunden __:__:00 bis __:__:59
System.out.println(jetzt.get(Calendar.SECOND);
MILLISECOND zur Berechnung der Millisekunden mit Java
Mit diesem Feld kannst du dir sogar Millisekunden anzeigen lassen.
Bedenke, dass 1 Sekunde bereits 1000 Millisekunden sind.
Deshalb benötigst du nur eine Darstellung bis 999 Millisekunden.
- Minimalwert: 0
- Maximalwert: 999
- Erläuterung: aktuelle Millisekunden Anzeige
System.out.println(jetzt.get(Calendar.MILLISECOND);
AM_PM zur Unterscheidung zwischen Früh und Nachmittag
Dieses Feld liefert dir einen Wert – entweder ist dieser 0 oder 1.
Ist dieser Wert 0, dann ist es vor 12 Uhr.
Und falls dieser Wert 1 ist, dann ist es nach 12 Uhr.
- Minimalwert: 0
- Maximalwert: 1
- Erläuterung: 0 = früh, 1 = nachmittags oder abends
System.out.println(jetzt.get(Calendar.AM_PM);
Wenn du Datum und Uhrzeit in einer vernünftigen Bildschirmausgabe verknüpfen willst….
Dann empfehle ich dir, die Werte zu speichern.
Schau noch einmal in die API DOCS.
Ja ich weiß….
Dieses Mal ist wirklich das letzte Mal für heute – versprochen.
Du siehst – die Konstanten sind alle statisch und somit Klassenvariablen.
Ganz logisch – dies ist schließlich auch das Wesen einer Konstanten.
Aber unsere Variablen sind alle vom Datentyp int.
Und deshalb musst du diese auch int-Variablen speichern.
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
int aktStunde = jetzt.get(Calendar.HOUR_OF_DAY);//Variable speichert die aktuelle Stunde
int aktMinute = jetzt.get(Calendar.MINUTE);//Speichern der aktuellen Minute
int aktJahr = heute.get(Calendar.YEAR);//Aktuelles Jahr
int aktMonat = heute.get(Calendar.MONTH)+1;//Aktueller Monat, achte auf +1
int aktTag = heute.get(Calendar.DAY_OF_MONTH);//Aktueller Tag
}
}
Wenn du jetzt die Werte ausgeben lassen würdest, könntest du diese verknüpfen.
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
int aktStunde = jetzt.get(Calendar.HOUR_OF_DAY);
int aktMinute = jetzt.get(Calendar.MINUTE);
int aktJahr = heute.get(Calendar.YEAR);
int aktMonat = heute.get(Calendar.MONTH)+1;
int aktTag = heute.get(Calendar.DAY_OF_MONTH);
System.out.println(aktStunde + aktMinute);//Addition statt Konkatenation (Aneinanderreihung)
}
}
Probiere selbst aus, was herauskommt.
Also klicke auf RUN.
Und läuft?
Wahrscheinlich nicht so wie gewünscht, oder?
Hallo – Es sind int-Daten.
Und Integer-Datentypen sind für Java – reine Zahlen.
Somit wird mit den Werten gerechnet, sobald diese in die println()-Anweisung verknüpft werden.
Also was machst du?
Ein einziger Textwert sorgt dafür, dass aus dem Plus als Rechenoperator – eine Konkatenation wird.
Also dann.
Hier ist der Java Code mit korrekter Ausgabe:
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
int aktStunde = jetzt.get(Calendar.HOUR_OF_DAY);
int aktMinute = jetzt.get(Calendar.MINUTE);
int aktJahr = heute.get(Calendar.YEAR);
int aktMonat = heute.get(Calendar.MONTH)+1;
int aktTag = heute.get(Calendar.DAY_OF_MONTH);
System.out.println(aktStunde + aktMinute);//Ausgabe funktioniert nicht, da Addition
System.out.println("Es ist: "+aktStunde+":"+aktMinute+" Uhr");//Bessere Ausgabe
}
}
Wenn du jetzt auf RUN klickst, erfolgt eine zufriedenstellende Bildschirmausgabe.
Und schließlich noch mit Datum:
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar jetzt = Calendar.getInstance();
Calendar heute = Calendar.getInstance();
int aktStunde = jetzt.get(Calendar.HOUR_OF_DAY);
int aktMinute = jetzt.get(Calendar.MINUTE);
int aktJahr = heute.get(Calendar.YEAR);
int aktMonat = heute.get(Calendar.MONTH)+1;
int aktTag = heute.get(Calendar.DAY_OF_MONTH);
System.out.println("Es ist: "+aktStunde+":"+aktMinute+" Uhr");//Uhrzeitausgabe
System.out.println("Heute ist der "+aktTag+"."+aktMonat+"."+aktJahr);//Datumausgabe
}
}
Zusammenfassung:
- Eine Möglichkeit um in Java auf Datum und Uhrzeit zuzugreifen, bietet die Klasse Calendar.
- Du solltest dabei beachten, dass die Klasse abstrakt ist.
Somit kannst du über den Konstruktoraufruf keine Objekte der Klasse Calendar erstellen. - Allerdings wird dir eine Klassenmethode angeboten, welche Objekte zurückgibt.
Diese Rückgabewerte kannst du dir dann, in Variablen abspeichern. - Um dann die Sekunden, Minuten, Stunden, Wochentage, Monate, Tage oder Jahre in Java auszugeben – musst du die getter-Methoden des jeweiligen Feldes aufrufen.