Calendar

Hallo Leute,

ich bin am verzweifeln 🤪

Für ein Projekt will ich ein Array aus Dates erstellen. Und das Array soll die letzten 30 Werktage enthalten.
Dafür experimentiere ich grade mit der Calendar-Klasse.

Wenn ich auf "DAY_OF_THE_WEEK direkt zugreife, bekomme ich den richtigen Wert (7 für Sonntag):

Java:
import java.util.Calendar;

public class Main {

    public static void main(String[] args) {
        Calendar meinKalender = Calendar.getInstance();
        System.out.println(meinKalender.DAY_OF_WEEK);
    }
}

Wenn ich per get()-Methode auf das Field zugreife bekomme ich den falschen Wert (1 für Montag):

Java:
import java.util.Calendar;

public class Main {

    public static void main(String[] args) {
        Calendar meinKalender = Calendar.getInstance();
        System.out.println(meinKalender.get(Calendar.DAY_OF_WEEK));
    }
}

Ich leider nix verstehen 😕
 

httpdigest

Top Contributor
Also, hier liegen ein paar Missverständnisse vor.
Der Ausdruck, bzw. die Klassenkonstante:
Java:
Calendar.DAY_OF_WEEK
die du übrigens falsch über eine Instanz aufrufst (sollte dir jede IDE auch entsprechend anmeckern), ist einfach nur eine numerische Konstante, die für einen Nutzer der API keine weitere Bedeutung/Semantik hat. Es ist intern einfach nur als 7 definiert, und bedeutet nicht Sonntag, sondern einfach: 7
Hier hätte aus API-Designsicht sicherlich ein Enum besser funktioniert.
Der Ausdruck:
Java:
meinKalender.get(Calendar.DAY_OF_WEEK)
liefert 1, weil 1 als SUNDAY (und nicht Montag) definiert ist. Siehe Dokumentation: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Calendar.html#DAY_OF_WEEK
Siehe auch: https://stackoverflow.com/questions/10118225/check-if-day-of-week-is-between-monday-and-friday
 
Oh, ok ich hab in der falschen Doc geschaut:

Darin wird nämlich entsprechend der ISO8601 gezählt und Montag ist 1.

Allerdings hab ich grad noch ne ganz andere Frage: wenn Calendar eine abstrakte Klasse ist, warum gibt es dann Konstruktoren und wieso kann man eine Instanz davon erstellen?
 

httpdigest

Top Contributor
wenn Calendar eine abstrakte Klasse ist, warum gibt es dann Konstruktoren
Auch abstrakte Klassen können Konstruktoren definieren, die aufgerufen werden, wenn man eine Instanz einer von dieser Klassen abgeleiteten Klasse erzeugt. Im Allgemeinen hat jede Klasse immer mindestens einen no-args Konstruktor, den man (wenn man ihn nicht explizit im Code definiert) auch "Default-Konstruktor" nennt. Generell muss jede Klasse in jedem ihrer Konstruktoren auch immer irgendeinen Superkonstruktor (also einen Konstruktor einer Oberklasse - im obersten Fall java.lang.Object) als erstes Statement aufrufen. Der Aufruf von no-args-Konstruktoren, also Konstruktoren ohne Parametern, geschieht implizit.
und wieso kann man eine Instanz davon erstellen?
Kann man doch gar nicht. Wieso glaubst du, dass man das kann?
 
Wenn du kannst, solltest du anstelle von Calendar besser LocalDate verwenden. Die Api von LocalDate ist um Längen besser als von Calender. Mit Calender hat man gefühlt zig Möglichkeiten sich in den Fuß zu schießen.

Ah ok. Muss ich mir mal anschauen.

Allerdings hab ich jetzt den Sinn dahinter verstanden, warum man eine Instanz einer abstrakten Klasse per Methode erstellen kann. Kann man ja gar nicht. Es wird eine Instanz von GregorianCalendar erstellt 😅 Aber mit Calendar wird ganz automatisch die Subklasse von Calendar gewählt, die für die eigenen "lokalen Bedingungen" passt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
N Erste Schritte Calendar.DAY_OF_YEAR Java Basics - Anfänger-Themen 3
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
I iCal Calendar mit Password und Username Java Basics - Anfänger-Themen 0
E Gregorian Calendar übergibt falschen Wochentag Java Basics - Anfänger-Themen 2
P Tag der Zeitumstellung Sommer->Winterzeit (Java Calendar) Problem Java Basics - Anfänger-Themen 5
S Calendar Neujahr Java Basics - Anfänger-Themen 10
T Calendar Methode roll(); Java Basics - Anfänger-Themen 2
J Calendar holidays Java Basics - Anfänger-Themen 4
L Datediff calendar Java Basics - Anfänger-Themen 3
D Java Date/Calendar Problem Java Basics - Anfänger-Themen 4
T Heutiges datum OHNE Calendar? Java Basics - Anfänger-Themen 9
M Calendar-Prüfung funktioniert nicht korrekt Java Basics - Anfänger-Themen 6
K Java Calendar Time Java Basics - Anfänger-Themen 10
N Fehler Calendar Java Basics - Anfänger-Themen 4
B Klassen Gregorian Calendar Java Basics - Anfänger-Themen 3
G Gregorian Calendar Eingabeprüfung Java Basics - Anfänger-Themen 4
M Calendar add-Funktion Java Basics - Anfänger-Themen 2
M Probleme mit Calendar Java Basics - Anfänger-Themen 9
0 Calendar - komme nicht weiter mit add Java Basics - Anfänger-Themen 2
lumo Datentypen Calendar to string und retour? Java Basics - Anfänger-Themen 4
S Calendar -- today Java Basics - Anfänger-Themen 4
N verständnisfrage java.util.Calendar Java Basics - Anfänger-Themen 4
W String zu Calendar parsen Java Basics - Anfänger-Themen 4
P (Arbeitstag-) Calendar - 9 anstatt 24 Stunden Java Basics - Anfänger-Themen 12
B Fehlermeldung für Calendar Java Basics - Anfänger-Themen 20
H Calendar rechnet möglicherweise falsch Java Basics - Anfänger-Themen 6
N Calendar Probleme Java Basics - Anfänger-Themen 5
G Gregorian Calendar aus toString() Ausgabe wiederherstellen Java Basics - Anfänger-Themen 4
A calendar Java Basics - Anfänger-Themen 6
K java.util.Calendar und Objekt Java Basics - Anfänger-Themen 7
C Problem Date / Calendar Java Basics - Anfänger-Themen 3
Paule Problem mit Date und Calendar Java Basics - Anfänger-Themen 3
W Gregorian Calendar Java Basics - Anfänger-Themen 5
S Calendar.set Time, Ermittlung der Anzahl Tage fehlerhaft Java Basics - Anfänger-Themen 9
G Probleme mit Konvertierung und Substraktion im Calendar Java Basics - Anfänger-Themen 4
S Konvertieren von Gregorian Calendar nach Date ? Java Basics - Anfänger-Themen 6
L Gregorian Calendar Problem Java Basics - Anfänger-Themen 7
S Calendar.set Methode Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben