Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: klaine en 23 Agosto 2011, 01:41 AM

Título: [GregorianCalendar] ¿Como saber cual es el primer día del mes?
Publicado por: klaine en 23 Agosto 2011, 01:41 AM
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