No. Los meses no te funcionan bien, porque no estra por el if correspondiente.
Código:
if ((mes3==04)||(mes3==06)||(mes3==9)||(mes3==11)) {
En realidad es
Código:
if ((mes3==3)||(mes3==5)||(mes3==8)||(mes3==10)) {
Estas diciendo que cuando el mes es diciembre, tiene 30 dias. Nos estas quitando la nochevieja, macho.
Lo del año bisiesto es otra historia. Sin embargo, hay pseudocodigos para obtenerlo, no en vano GregorianCalendar, se limita a usar eso. Buscalo en google
Saludos.