Java - Problemas al comparar java.sql.Time

 
Vista:

Problemas al comparar java.sql.Time

Publicado por Cristian Nuñez (1 intervención) el 04/09/2016 16:50:06
Buenos días gente, estoy teniendo algunos problemas al comparar unos java.sql.Time. Les comento lo que estoy queriendo hacer, es un sistema en el cual existe un Profesional, el cual puede registrar citas, las citas tienen una fecha, una hora de inicio y una hora de fin. La idea es que el sistema no le permita crear una cita nueva si es que la misma se superpone con alguna cita ya creada...
un fragmento de la clase Cita:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Cita {
	//.....
	@Column(name="fecha")
	@Required
	private java.util.Date fecha;
 
	@Column(name="hora_inicio")
	@Required
	private java.sql.Time horaInicio;
 
	@Column(name="hora_fin")
	@Required
	private java.sql.Time horaFin;
//....
}


un fragmento de la clase Profesional:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Profesional {
	@OneToMany(mappedBy="profesional")
	private List<Cita> citas;
 
	public Boolean estaLibre(Date fecha, java.sql.Time inicio, java.sql.Time fin){
		Boolean retorno = true;
		Date fechaCita;
		Date fechaNueva;
		for (Cita cita : this.citas) {
			fechaCita = Util.darFormatoConGuiones(cita.getFecha());
			fechaNueva = Util.darFormatoCompleto(fecha);
			System.out.println("LA FECHA DE CITAS GUARDADA: "+fechaCita);
			System.out.println("LA FECHA NUEVA: "+fechaNueva);
			if(fechaCita.equals(fechaNueva)){
				System.out.println("las fechas son iguales");
				if((Util.estaEnRangoTime(inicio, cita.getHoraInicio(), cita.getHoraFin()))){
				//|| (Util.estaEnRangoTime(fin, cita.getHoraInicio(), cita.getHoraFin()))){
					retorno = false;
				}
			}
		}
 
		return retorno;
	}
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
El metodo Util.estaEnRangoTime:
 
	public static Boolean estaEnRangoTime(java.sql.Time hora, java.sql.Time inicio, java.sql.Time fin){
		Boolean retorno = false;
		if(((hora.after(inicio)) && (hora.before(fin))) || (hora.equals(inicio))){
			retorno = true;
		}
		System.out.println("hora: "+hora);
		System.out.println("inicio: "+inicio);
		System.out.println("fin: "+fin);
		System.out.println("hora.after(inicio): "+hora.after(inicio));
		System.out.println("hora.before(fin): "+hora.before(fin));
		System.out.println("hora.equals(inicio): "+hora.equals(inicio));
		return retorno;
	}

La salida por consola:

LA FECHA DE CITAS GUARDADA: Sun Sep 04 00:00:00 ART 2016
LA FECHA NUEVA: Sun Sep 04 00:00:00 ART 2016
las fechas son iguales
hora: 08:00:00
inicio: 08:00:00
fin: 09:00:00
hora.after(inicio): true
hora.before(fin): false
hora.equals(inicio): false
LA FECHA DE CITAS GUARDADA: Sun Sep 04 00:00:00 ART 2016
LA FECHA NUEVA: Sun Sep 04 00:00:00 ART 2016
las fechas son iguales
hora: 08:00:00
inicio: 08:30:00
fin: 09:30:00
hora.after(inicio): true
hora.before(fin): false
hora.equals(inicio): false
supuestamente esta libre

Como ven me arroja cualquier cosa! por ultimo les dejo lo que guarda en la base de datos. (postgresql):

hora_fin hora_inicio
09:00:00.483 ; 08:00:00.482
09:30:00.881 ; 08:30:00.881
09:00:00.445 ; 08:00:00.445

los tipos de datos de las columnas:

hora_fin time without time zone,
hora_inicio time without time zone,

Ojala me puedan orientar, ya estoy hace un tiempo, leyendo pero todavía no encuentro que estoy haciendo mal. Muchas gracias desde ya! Saludos!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder