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

danielreales7 comentado

Eso realmente me compara toda la fecha actual, incluendo la hora con el dato que me llega de la BD, pero lo que recibo de la BD es solamente la fecha y no tengo la hora, así que no puedo comparar las horas como yo quiero hacerlo.

0voto

egoitz_gonzalez comentado

Para sacar la hora prueba lo siguiente:

comparar1.getHours();

0voto

danielreales7 comentado

Me pone como que está obsoleto.

0voto

egoitz_gonzalez comentado

Pero funciona? ahora habrá otro método que haga lo mismo. Pero no sé cual es.

0voto

egoitz_gonzalez comentado

0voto

danielreales7 comentado

Claro como el código que utilizo, que está en este post digo.
Aunque me he fijado que la función:

comparar1 = dateFormat.parse(hora1);
comparar2 = dateFormat.parse(horaActual2);

Me obtiene la hora como quiero pero mal, es decir, el año pone 1970 y el día no coincide.

0voto

egoitz_gonzalez comentado

Y que valor tiene hora? que luego lo pasas a la variable String hora1?

0voto

danielreales7 comentado

Pues esa es la hora que viene de la BD, en este caso 09:30 o 10:00 siempre son horas exactas.
Y la actual la almaceno de igual forma.

El problema creo que es del dateFormat al hacer el casting.

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