entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Problemas con horas en Java

Buenas, estoy teniendo un problema con las horas en java.
Sobre todo con la hora 00:00
Quiero comprobar dos horas, si la hora actual está entre las 13:00 y las 16:00 y también entre las 20:00 y las 00:00 un botón se puede pulsar si no está entre ese rango de horas no se puede pulsar un botón.

Como puedo solucionar ese problema. Estaba realizando lo siguiente:

Calendar cal = Calendar.getInstance();
    int currentHour = cal.get(Calendar.HOUR);
    if (currentHour >= 1 && currentHour <= 4) {
        Log.d("debug", "Hora Dentro => " + currentHour);
    }
    if (currentHour >= 8 && currentHour <= 0) {
        Log.d("debug", "Hora Dentro => " + currentHour);
    }
    Log.d("debug", "Hora Fuera => " + currentHour);

3 Respuestas

2votos

danielreales7 Puntos5380

He dado con la solución, lo que pasa que con el botón estoy teniendo un problema.
Aquí el código:

Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

    try {
        DateFormat dateFormat = new SimpleDateFormat ("hh:mm:ss");

        String hora1 = "13:00:00";
        String hora2 = "16:00:00";
        String hora3 = "20:00:00";
        String hora4 = "23:59:00";
        String horaNueva = sdf.format(cal.getTime());

        Date date1, date2, date3, date4, dateNueva;
        date1 = dateFormat.parse(hora1);
        date2 = dateFormat.parse(hora2);
        date3 = dateFormat.parse(hora3);
        date4 = dateFormat.parse(hora4);
        dateNueva = dateFormat.parse(horaNueva);

        if ((date1.compareTo(dateNueva) <= 0) && (date2.compareTo(dateNueva) >= 0)){
            tramitarPedido.setEnabled(true);
            Log.d("debug","La hora " + horaNueva + " está entre " + hora1 + " y " + hora2);
        } else {
            tramitarPedido.setEnabled(false);
            Log.d("debug","La hora " + horaNueva + " no está entre " + hora1 + " y " + hora2);
        }

        if ((date3.compareTo(dateNueva) <= 0) && (date4.compareTo(dateNueva) >= 0)){
            tramitarPedido.setEnabled(true);
            Log.d("debug","La hora " + horaNueva + " está entre " + hora3 + " y " + hora4);
        }else{
            tramitarPedido.setEnabled(false);
            Log.d("debug","La hora " + horaNueva + " no está entre " + hora3 + " y " + hora4);
        }
    } catch (ParseException parseException){
        parseException.printStackTrace();
    }

El problema que estoy teniendo es que pasa por las dos sentencias if y si la primera es correcta y la segunda no me pone el botón a falso.
Pero así es como se comparan dos horas.

Gracias por la ayuda Yuki.

0voto

Yuki comentado

Jajajaj ya me parecia raro ver en tu código dos sentencias If sin anidar.

Saludos!

0voto

Yuki Puntos610

Bueno, yo lamentablemente no programo en java, pero voy a tratar de ayudar. lamento si mi explicación no tiene nada que ver con nada.
Yo te digo que te pases por la siguiente pag (http://stackoverflow.com/questions/833768/java-code-for-getting-current-time) y veas si podes adapar el primer código visible a tus necesidades.

Vease: http://docs.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html y http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

También podrias utilizar la API GetLocalTime de Windows, devuelve una estructura muy clara sobre el tiempo actual en el ordenador.

Lamento si no fui de mucha ayuda, Saludos!

3votos

serrapos Puntos460

Buenas!

Lo primero, te recomiendo que para trabajar con fechas en java utilices una librería como JodaTime, es bastante más simple trabajar con fechas.

Por lo demás, en los if deberías añadir las dos condiciones al mismo tiempo, si tu idea es tramitar pedido si se cumple alguna de las dos condiciones usa:

if((COND1) || (COND2)){
tramitarPedido.setEnabled(true);
}else{
tramitarPedido.setEnabled(false);
}

De esta forma te pondrá tramitar pedido a true cuando se cumpla la condición 1 o la dos.

Quedaría algo como:

if((date1.compareTo(dateNueva) <= 0) && (date2.compareTo(dateNueva) >= 0) || (date3.compareTo(dateNueva) <= 0) && (date4.compareTo(dateNueva) >= 0)){
tramitarPedido.setEnabled(true);
}else{
tramitarPedido.setEnabled(false);
}

Espero que te sirva.

0voto

danielreales7 comentado

Muchas gracias por la ayuda. Me sirvió!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta