Calendar

  • Themenstarter bartholomaeus87
  • Beginndatum
Diskutiere Calendar im Java Basics - AnfÀnger-Themen Bereich.
B

bartholomaeus87

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 😕
 
H

httpdigest

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
 
B

bartholomaeus87

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?
 
H

httpdigest

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?
 
L

LimDul

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

bartholomaeus87

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.
 
Thema: 

Calendar

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben