En java.util.Calendar
Der Januar ist als Monat 0 definiert, nicht als Monat 1. Gibt es dafür einen bestimmten Grund?
Ich habe gesehen, wie viele Leute darüber verwirrt waren...
En java.util.Calendar
Der Januar ist als Monat 0 definiert, nicht als Monat 1. Gibt es dafür einen bestimmten Grund?
Ich habe gesehen, wie viele Leute darüber verwirrt waren...
Man sollte meinen, dass wir mit der Abschaffung des größten Teils von Date und der Einführung der neuen Kalenderklasse hinzugefügt haben, hätten wir das größte Ärgernis von Date behoben: die Tatsache dass Januar der Monat 0 ist. Das hätten wir sicherlich tun sollen, aber leider haben wir es nicht getan. Wir befürchteten, dass die Programmierer verwirrt sein würden, wenn Date nullbasierte Monate und Calendar einbasierte Monate verwendet. Und ein paar Programmierer wären wahrscheinlich verwirrt gewesen. Aber im Nachhinein betrachtet, ist die Tatsache, dass Kalender immer noch nullbasiert ist, hat zu einer enormen Menge an Verwirrung gestiftet, und es war wahrscheinlich der größte einzelne Fehler in den internationalen Java internationalen API's.
Zitiert von Internationale Kalender in Java von Laura Werner, Link am Ende des Textes.
Vielleicht wiederhole ich nur, was andere gesagt haben: Wirf die alten und schlecht gestalteten Calendar
Klasse über Bord und verwenden java.time, die moderne Java-API für Datum und Uhrzeit. Dort sind die Monate durchweg vernünftig nummeriert, von 1 für Januar bis 12 für Dezember.
Wenn Sie eine Calendar
von einer veralteten API, die noch nicht auf java.time aktualisiert wurde, ist als erstes eine Konvertierung zu einer modernen ZonedDateTime
. Je nach Ihrem Bedarf können Sie von dort aus weitere Umrechnungen vornehmen. In den meisten Ländern der Welt ist die Calendar
Objekt, das Sie erhalten, ist praktisch immer eine Instanz der GregorianCalendar
Unterklasse (da die Calendar
Klasse selbst ist abstrakt). Zu demonstrieren:
Calendar oldfashionedCalendarObject = Calendar.getInstance();
ZonedDateTime zdt
= ((GregorianCalendar) oldfashionedCalendarObject).toZonedDateTime();
System.out.println(zdt);
System.out.format("Month is %d or %s%n", zdt.getMonthValue(), zdt.getMonth());
Ausgabe, als ich soeben in meiner Zeitzone lief:
2021-03-17T23:18:47.761+01:00[Europe/Copenhagen] Month is 3 or MARCH
java.time.Month
Java bietet Ihnen eine weitere Möglichkeit, 1-basierte Indizes für Monate zu verwenden. Verwenden Sie die java.time.Month
enum. Für jeden der zwölf Monate ist ein Objekt vordefiniert. Ihnen sind jeweils Nummern von 1-12 für Januar-Dezember zugewiesen; Aufruf getValue
für die Nummer.
Benutzen Sie Month.JULY
(Gibt Ihnen 7) anstelle von Calendar.JULY
(Gibt dir 6).
(import java.time.*;)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.