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

3votos

Duda en comparar registro_entrada con el turno_entrada

Hola a todos soy nueva en esto, investigue en internet los metodos que me permitan comparar horas y del cual encontre la clase Date utiliza dos metodos after() y el before() por lo que he visto lo utilizan para comparar fechas, la duda que tengo ¿se puede utilizar estos metodos after() y el before() para comparar horas? lo que quiero hacer es comparar esas horas tomandolos desde la base de datos; por ejemplo si el trabajador tiene un turno de 8:00:00 a 18:00:00, tomando en cuenta estas reglas si el trabajador se le hace tarde y registra su hora de entrada 8:15:00 ya se considera como retardo y se le descuenta esos minutos a su banco de horas, la otra cuestion es si el trabajador se registra su hora de entrada 8:20 ya se considera como falta de ese dia y en estos casos se vaya descontando ese tiempo en su banco de horas. estoy usando JSP´S y Servlets con MVC .

Este es el codigo que tengo:

    try {
         SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");

        String registro_hora_entrada = request.getParameter("registro_hora_entrada");
        String turno_hora_entrada = request.getParameter("turno_hora_entrada");

        Date registro_hora_e =format.parse(registro_hora_entrada);
        Date turno_hora_e =  format.parse(turno_hora_entrada);

        String consulta = "";
        consulta = "SELECT T.ID_TRABAJADOR,T.NOMBRE_TRABAJADOR,RA.REGISTRO_HORA_ENTRADA,RA.REGISTRO_HORA_SALIDA,TR.TURNO_HORA_ENTRADA,TR.HORA_SALIDA_TURNO WHERE T.ID_TRABAJADOR=RA.ID_TRABAJADOR";

        if (registro_hora_entrada.affer(turno_hora_entrada))
            consulta += "AND RA.REGISTRO_HORA_ENTRADA>='" +turno_hora_entrada + "' ";
            System.out.println("Tiene falta");

        System.out.println(consulta);

   } catch (Exception o) {
        System.out.println("Error: " + o);

}
}}

les agradeceria sus observaciones y sugerencias.

1 Respuesta

2votos

white Puntos75880

Puedes obtener la diferencia entre dos fechas restandolas, de esta manera:

diferencia = hora_entrada.getTime() - turno_entrada.getTime();

luego puedes obtener los minutos de atraso:

mins_atraso = diferencia / (60 * 1000) % 60

Ejemplo:

      SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
      String turno_hora_entrada = "04/02/2015 08:00:00";
      String registro_hora_entrada = "04/02/2015 08:05:20";

      try {
           Date turno_entrada = format.parse(turno_hora_entrada);
           Date hora_entrada = format.parse(registro_hora_entrada);
           long diferencia = hora_entrada.getTime() - turno_entrada.getTime();

           if( hora_entrada.after(turno_entrada) )
           {
                System.out.println("si hay atraso");

                // vemos cuantos minutos se atraso
                long mins_atraso = diferencia / (60 * 1000) % 60;
                long dias_atraso = diferencia / (24 * 60 * 60 * 1000);

                if(dias_atraso > 0 )
                {
                     // tomar medidas si es mayor al dia de turno
                }

                // si tiene 1 o mas minutos de atraso ...
                else if( mins_atraso > 0 )
                {
                     System.out.println(String.format("%d minutos de atraso", mins_atraso));

                     if( mins_atraso >= 0 && mins_atraso <= 20 )
                     {
                          // tomar medidas para atraso de 8:15 a 8:20
                     }
                     else if( mins_atraso > 20 )
                     {
                          // tomar medidas para atraso de 8:20 en adelante  
                     }
                }
           }
           else
           {
                System.out.println("no hay atraso");

                // tomar medidas aca ...
           }

      } catch (Exception e) {
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
      }

este ejemplo imprimiria:

> si hay atraso
> 15 minutos de atraso

tambien si dispones de java 8 puedes usar Period.between()

0voto

Cristi_C comentado

Te agredezco por tus recomendaciones, estoy analizando el ejemplo, para dar seguimiento con lo que tengo que hacer

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