[GregorianCalendar] ¿Como saber cual es el primer día del mes?

Iniciado por klaine, 23 Agosto 2011, 01:41 AM

0 Miembros y 1 Visitante están viendo este tema.

klaine

Hola, estoy haciendo una aplicación para manejar horarios, la gui la hice de tal forma que al pasarle desde donde hasta donde son los días del mes de x año me genera una ventana con los 42 JLabels con su día asignado, ahora bien, lo que necesito es cómo saber que día empieza x mes, para esto creé una subclase de GregorianCalendar, a la cual llamé ZCalendar, los métodos más importantes que me interesería saber si están bien hechos son getFirtsDayOfMonth() y getLastDayOfMonth(), lo que pasa es que a veces se me corre un día el calendario si pudieran decirme que estoy haciendo mal estaría bastante agradecido.

Código (java) [Seleccionar]

package horario;

import java.util.HashMap;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* Clase para obtener los datos necesarios para construir la interfaz grafica <code> Meses </code>
*
* @param año Los datos del objeto se crearan a pertir del año dado
* @param mes Los datos del objeto se crearan a pertir del mes dado
* @author Zero
*/
public class ZCalendar extends GregorianCalendar{

    Calendar g=GregorianCalendar.getInstance();

    int[] dias={g.MONDAY, g.TUESDAY, g.WEDNESDAY,g.THURSDAY,g.FRIDAY,g.SATURDAY,g.SUNDAY};

    /**
     * Arreglo utilizado para saber que día termina cada mes del año
     */
    int[] last={31, 28, 31,30,31,30,31,31,30,31,30,31};

    /**
     * Indica el año con que se construye este objeto
     */
    int y=0;

    /**
     * Usado para conocer que indice tendra cada mes del año en el arreglo <code>last[]</code>
     */
    HashMap<Integer, String> mez=null;

    /**
     * Indica el mes con que se construye este objeto
     */
    int m=0;

    /**
     * Indica el primer día del mes
     */
    int first=0;

    ZCalendar(int año, int mes){

        this.set(ZCalendar.YEAR, año);
        this.set(ZCalendar.MONTH, mes);

        m=mes;

        mez=new HashMap<Integer, String>();

        y=año;

        int w=0;

        mez.put(w, "Enero"); w++;
        mez.put(w, "Febrero"); w++;
        mez.put(w, "Marzo"); w++;
        mez.put(w, "Abril"); w++;
        mez.put(w, "Mayo"); w++;
        mez.put(w, "Junio"); w++;
        mez.put(w, "Julio"); w++;
        mez.put(w, "Agosto"); w++;
        mez.put(w, "Septiembre"); w++;
        mez.put(w, "Octubre"); w++;
        mez.put(w, "Noviembre"); w++;
        mez.put(w, "Diciembre"); w++;




    }

    /**
     * Devuelve la posicion del <code>ZLabel</code> desde donde empezarán los días del mes
     */
    int getFirstDayOfMonth(){

        int d=0;

        this.set(this.DAY_OF_MONTH, this.DAY_OF_MONTH - this.DAY_OF_MONTH);

        d=this.get(this.DAY_OF_WEEK);

        d++;

        first=d;

        return d;

    }

    /**
     * Devuelve la posicion del <code>ZLabel</code> en donde terminarán los días del mes
     */
int getLastDayOfTheMonth(){

    int x=0;

    if(m==1){

        return inFeb();

    }

    if(last[m]==30){

        return in30();

    }

    if(last[m]==31){

        return in31();

    }

    return x;
   
    }

private int in30(){

    switch(first){

        case 0:
        return 29;
        case 1:
        return 30;
        case 2:
        return 31;
        case 3:
        return 32;
        case 4:
        return 33;
        case 5:
        return 34;
        case 6:
        return 35;
        case 7:
        return 36;

    }

    return 10;

}

private int in31(){

    switch(first){

        case 0:
        return 30;
        case 1:
        return 31;
        case 2:
        return 32;
        case 3:
        return 33;
        case 4:
        return 34;
        case 5:
        return 35;
        case 6:
        return 36;
        case 7:
        return 37;


    }

    return 10;

}

private int inFeb(){

    if(isBis(y)){

        switch(first){

            case 0:
            return 28;
            case 1:
            return 29;
            case 2:
            return 30;
            case 3:
            return 31;
            case 4:
            return 32;
            case 5:
            return 33;
            case 6:
            return 34;
            case 7:
            return 35;

        }

    }else{

        switch(first){

            case 0:
            return 27;
            case 1:
            return 28;
            case 2:
            return 29;
            case 3:
            return 30;
            case 4:
            return 31;
            case 5:
            return 32;
            case 6:
            return 33;
            case 7:
            return 34;


        }

    }

    return 10;

}

/**
     * Devuelve <code>true</code> si <code>x</code> es multiplo de 4
*
* @param x Representa el año que se desea saber si es bisiesto
     */
boolean isBis(int x){

        if(x%4==0){
        return true;
        }else{
        return false;
        }

    }

/**
     * Devuelve el nombre del mes correspondiente
*
* @return m El nombre del mes con el que se construye este objeto
     */
String getMonthName(){

    return mez.get(this.m);

}

/**
     * Devuelve el año correspondiente
*
* @return m El año con el que se construye este objeto
     */
String getYearName(){

    return y+"";

}

}



Saludos