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

1voto

Comparar 2 horas en java

Estoy teniendo un problema al comparar 2 horas en java, necesito saber por ejemplo si la hora que me llega de la base de datos es las 20:00 y la hora actual son las 19:00 saber el tiempo que hay entre cada hora.

Quiero saber si la hora actual es mayor a 1 hora como en este caso.

Estoy haciendo lo siguiente para obtener las 2 horas con el siguiente formato:

DateFormat dateFormat = new SimpleDateFormat ("hh:mm");
String hora1 = hora; 
Calendar c1 = Calendar.getInstance();
int horaActual, minutosActual;
horaActual =c1.get(Calendar.HOUR_OF_DAY);
minutosActual = c1.get(Calendar.MINUTE);
String horaActual2 = horaActual+":"+minutosActual;
Date comparar1, comparar2;
comparar1 = dateFormat.parse(hora1); //Esta es la hora que me viene de la BD
comparar2 = dateFormat.parse(horaActual2); //Esta es la hora actual
if ((comparar1.compareTo(comparar2) > 1)){

Hago todo eso para obtener la hora en la BD porque no la tengo almacenada como hora en sí, pero de todas formas me obtiene las 2 horas bien, creo que el problema es a la hora de comparar las dos horas en el if.

0voto

egoitz_gonzalez comentado

Hola. Que error recibes?

0voto

danielreales7 comentado

No recibo ningún error, solo que si la hora actual es mayor a 1 hora pues debería de entrar y no entra.

1 Respuesta

2votos

egoitz_gonzalez Puntos10050

Hola.

Mirando por la documentación he encontrado esta manera de comprar las fechas.

java.util.Date utilDate = new java.util.Date(); 
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
if (utilDate.compareTo(sqlDate) == 0){
   System.out.println("IGUALES"); 
}else{ 
   System.out.println("DIFERENTES"); 
}

0voto

egoitz_gonzalez comentado

Y si instancias SimpleDateFormat de la siguiente manera:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss"); 

Tal vez de la BD te vienen mas datos. No solo la hora.

0voto

danielreales7 comentado

El problema es que en la BD almaceno en un campo la fecha y en otro las horas, pero las horas no las almaceno tal cual como 09:00 sino como 0, 1, 2, 3.. hasta 28 por otro motivo que necesitaba, entonces después según el valor le digo que valga si es 0 las 9:00, 1 las 9:30...

Por eso quería saber manejar el tiempo entre 2 horas si existía alguna función.

0voto

Leonardo-Tadei comentado

Hola Daniel,

si tenés las horas guardadas de esa manera tan particular, podrías volver a convertilas a formato de horas y usar ese string para concatenerlo al formato del constructor de SimpleDateFormat() que te comenta @egoitz_gonzalez

hora = "199:30";
hora_tmp = "yyyy MMM dd "+hora+":ss";
SimpleDateFormat dateFormat = new SimpleDateFormat(hora_tmp); 

y luego hacer las comparaciones.

Saludos!

0voto

danielreales7 comentado

Al hacer eso que me dices, me obtiene la cadena de esta forma "yyyy MM dd "+23:57+":ss";

Parece ser que no está obteniendo bien el parseo con ese formato.

0voto

Leonardo-Tadei comentado

Hola Daniel,

confundí la máscara con el valor de fecha a parsear... no sé en qué estaba pensando. La idea que te quería transmitir era la de poner un valor arbitrario al año, al es, al día y a los segundos, para luego poder hacer operaciones con la fecha en su formato completo, en la que solo varía la hora a comparar.

Otra alternativa es hacer todo lo contrario: tomar la hora actual y convertirla a los valores que almacenás en la DB, y luego comparar directamente contra la DB. Como las reglas de conversión de la hora a tu formato son fijas, podrás comparar directamente contra los valores almacenados previamente convertir la hora actual a tu formato...

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