Skip to main content

Uhrzeit und Datum mit der Java Klasse Calendar

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.

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.

Java-Calendar-API-DOCS

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.
Java Klasse Calendar Abstract


Was heißt das jetzt genau?
Der normale Weg besteht darin, Java Objekte per Konstruktoraufruf zu erstellen.

Java Klasse Calendar Konstruktor

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.

Java Klasse Calendar getInstance

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.

Java Klasse Calendar getTime

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.

Java Klasse Calendar getTime Date Objekt

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()“.

Java-Klasse-Calendar-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.

Java Calendar getTimeInMillis

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.
Java-Datum-und-Uhrzeit-Excel

Dann ändere das Excel-Format von Standard auf Datum.
Java-Datum-und-Uhrzeit-ändern-Excel

BÄÄM, schon siehst du den Anbeginn der Computerzeitrechnung.
Java-Datum-und-Uhrzeit-Zeitrechnung-Excel

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.

Java-Umrechnung-Millisekunden-in-Tage

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.

Java-Calendar-Klasse-Konstanten

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. 🙂

Java-Calendar-Klasse-Konstanten

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.