Dia de la semana a partir de fecha en formato int

publicado por: Anonymous

Quiero que hacer una función que a partir de tres valores en int (dia mes año) me devuelva que dia de la semana es, googleando he llegado a esta funcion pero me da error, no acierta con el dia que es.

Este es el código:

   String diaSemana (int dia, int mes, int ano)
   {
    String letraD="";
    int nD =-1;
    Calendar c = Calendar.getInstance();

    c.set(ano, mes, dia);
    nD=c.get(Calendar.DAY_OF_WEEK); 
    switch (nD){
        case 1: letraD = "D";
            break;
        case 2: letraD = "L";
            break;
        case 3: letraD = "M";
            break;
        case 4: letraD = "X";
            break;
        case 5: letraD = "J";
            break;
        case 6: letraD = "V";
            break;
        case 7: letraD = "S";
            break;
    }

    return letraD;
}

Dejo aqui un log.i que tengo para depurar:
diaSemana: 4 2017,4,10
deberia salir dia semana: 2

solución

Os pongo la solucion que he encontrado
He usado GregorianCalendar finalmente y he tenido que restar uno al mes (Enero es mes 0) . Este es el código:

String diaSemana (int dia, int mes, int ano)
    {
        String letraD="";
        /*Calendar c = Calendar.getInstance();
        c.set(ano, mes, dia, 0, 0, 0);
        nD=c.get(Calendar.DAY_OF_WEEK);*/
        TimeZone timezone = TimeZone.getDefault();
        Calendar calendar = new GregorianCalendar(timezone);
        calendar.set(ano, mes-1, dia);
        int nD=calendar.get(Calendar.DAY_OF_WEEK);
        Log.i("result","diaSemana: "+nD+" dia:"+dia+" mes:"+mes+ "año:" +ano);
        switch (nD){
            case 1: letraD = "D";
                break;
            case 2: letraD = "L";
                break;
            case 3: letraD = "M";
                break;
            case 4: letraD = "X";
                break;
            case 5: letraD = "J";
                break;
            case 6: letraD = "V";
                break;
            case 7: letraD = "S";
                break;
        }

        return letraD;
    }

También he encontrado esta que es mas sencilla e intuitiva:

 Calendar c = Calendar.getInstance();
 c.set(año,mes,dia) // vairables int
 int dia =  c.get(Calendar.DAY_OF_WEEK);
 if(dia==Calendar.SUNDAY){
   //Domingo
 }if(dia==Calendar.MONDAY){
   //Lunes
 }
if(dia==Calendar.TUESDAY){
   //Martes
 }
...
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *