Calendar.isLenient()

Es gibt leider bei Date und Calendar in Java eine Menge Ungemach. Hierzu gehört auch das Aufweichen der Validität von Datumsangaben Leniency genannt.
In all cases, arguments given to methods for these purposes need not fall within the indicated ranges; for example, a date may be specified as January 32 and is interpreted as meaning February 1. java.util.Calendar

Aber hier haben die Designer in Java zwei Stolpersteine eingebaut.

1. isLenient() ist standardmäßig auf true(!) gesetzt. Das gibt bei fehlerhafter oder fehlender Validierung durch die höheren Layer lustige Effekte.

Gut, denkt man sich, dann mache ich einen Wrapper und kann hierbei noch diverse andere Klippen gleich mit umschiffen. Dann kommt aber manchmal ein Stolperstein 2 zum Tragen.

2. Und dieses ist, dass java.util.Calendar.isLenient() auch wirklich manchmal eingeschaltet werden muss. Weil es sonst (zumindest unter einer Java 1.5-Version, die wir just auch produktiv eingesetzt haben) eine interne Exception gibt, wenn nach mehreren SetXXX-Aufrufen der interne Calendar-Status bei periodEnd.getTime(); nicht mehr konsistent ist. Unter Java 1.6 tritt dies nicht mehr auf.