Di questa caratteristica avevo già parlato in un post di qualche anno fa, ma proprio non la digerisco: getMonth è base 0, mentre getDate è base 1.
I miei amici sanno che "rompo" un pò sulla storia della base 0, di cui capisco benissimo l'origine legata agli indirizzi di memoria (visto che sono Ing. Elettronico qualcosa mi dice); però ritengo che un linguaggio di alto livello debba mascherare questo aspetto. Mi sta bene che un ciclo, concetto prettamente informatico, vada su base 0; ma che una funzione di una classe DateTime mi restituisca 1 per dire che siamo a Febbraio fatico a digerirlo. Quando poi penso che la funzione getDate è a base 1 e non c'è coerenza la fatica aumenta.