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

Calculo entre horas

Buenas a todos!! Soy nuevo en Java y necesito calcular unas diferencias horarias en Java, las cuales estan casi todas en milisegundos y la verdad es que me esta costando mas de lo deseado...
Este es parte del codigo:

int duracion = myObj.().getDuracion();
//Calculo cuantos minutos tengo disponibles
    Long minutos = (Long) (((obj.getHoraFin().getTime() - obj.getHoraInicio().getTime()))/ ((60 * 1000) % 60));
Long hi = obj.getHoraInicio().getTime();//Esta va a ser la hora de inicio de un registro en la BD
int totalRegistros = (int) (minutos / (duracion)); //Es la cantidad de minutos disponibles dividido la duracion de cada porcion
int registrosCargados = 0;
for (int i = 0; i < totalRegistros; i++) {
// La hora fin es la hora inicial (en milisegundos) + la duracion en milisegundos
Long hf = hi + (duracion * 60000);
   //Guardo en la BD
   hi = hf; //La  hora inicio del proximo registro sera la hora fin de este

No estoy seguro que estoy haciendo mal, pero en la bd los registros de horas se guardan asi

01/01/1970 11:15:34 a.m.

Cualquier ayuda o consejo seria muy apreciado

Muchas gracias y muchos saludos!!!!

0voto

white comentado

Hola @CrisJF, que error o resultado indeseado tienes? podrías explicar con detalle que problema se presentó?

PD: podrias agregar el código donde haces la consulta para guardas los valores?

0voto

CrisJF comentado

Era un problema entre el front end y el back end, dado que la hora desde la BD llegaba con dia 1/1/1970 y las que yo enviaba desde mi aplicacion por defecto eran con la fecha del sistema, lo solucione generando objetos de tipo calendario y seteandole lashoras, minutos y segundos manualmente. Muchas gracias de todos modos!!!

0voto

white comentado

Me alegra se haya solucionado, por favor si es posible podrias agregar como respuesta tu solución con algun codigo y seleccionarla? eso seria de gran ayuda a usuarios que tengan el mismo problema.

saludos!

1 Respuesta

2votos

CrisJF Puntos300

Era un problema entre el front end y el back end, dado que la hora desde la BD llegaba con dia 1/1/1970 y las que yo enviaba desde mi aplicacion por defecto eran con la fecha del sistema, lo solucione generando objetos de tipo calendario y seteandole lashoras, minutos y segundos manualmente. Muchas gracias de todos modos!!!

Aqui la solucion:

Tanto desde la BD como desde Javascript, los datos llegan como objeto DATE (util.date o sql.date), de estos solo necesito las horas, minutos y segundos por lo que utilizo un objeto Calendar y le seteo dichos valores con una pequeña funcion:

Date horaInicioBD= [...]getHoraInicio();
  Date horaInicioJS= [...]getHoraInicio();

Calendar hiBD=setHora(horaInicioBD);
Calendar hiJS=setHora(horaInicioJS);
  private Calendar setHora(Timestamp hora) {
          Calendar c = Calendar.getInstance();
          c.set(Calendar.HOUR_OF_DAY, hora.getHours());
          c.set(Calendar.MINUTE, hora.getMinutes());
          c.set(Calendar.SECOND, hora.getSeconds());
          return c;
     }

De esta manera, no importa que Oracle guarde una hora con una fecha incrustada por defecto, al crear la instancia del calendario, la fecha va a ser la del sistema y no genera conflictos

PD: Se que setear horas, minutos y segundos son funciones ya despreciadas, pero me fue util para salir del apuro ;)

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