Problema con aplicación web Java-MySQL

jorlo82

Bovino maduro
#1
Hola a todos compañeros bakunos tengo un gran problema, me pidieron hacer una aplicación web para un billar, yo trabajo con java beans, daos, servlets, jsp y mysql, pero me he atorado gravemente en la parte de las horas verán lo que tengo que hacer es lo siguiente:

Hora Entrada-------Hora Salida-----Tiempo en Pesos
----11:05---------------12:05------------------25
----01:30---------------02:45------------------32
----03:10---------------04:40------------------39

La primera hora se cobra a 25 y de ahí cada 15 minutos aumenta 15 pesos, mi problema es que nunca he manejado las horas ni en mysql ni en java para pasarlos al formato de tiempo que tenga java, asi que lo que empecé a hacer fue hacer una columna de hora de entrada una de minutos de entrada y lo mismo de salida y manejarlo como numerico y hacer un procedimiento en mysql que haga esta operacion y que lo guarde en la columna tiempo en pesos pero no se si alguien me pudiera recomendar una mejor forma ya que esta bastante largo el procedimiento y no me ha salido quisiera optimizarlo.

Muchas gracias a todos
:vientos:
 

Salandrews

Bovino maduro
#2
Una idea es manejar todo el tiempo en minutos.

En la tabla donde tengas la captura del tiempo, el campo hora_entrada y el campo hora_salida declaralos como tipo time. El formato que maneja time es sencillo HH:MM:SS (en formato de 24 horas hora:minutos:segundos).

Para calcular el tiempo transcurrido entre la hora de entrada y la de salida, podes usar la función subtime(expr1,expr2). Esta función resta expr2 de expr1. Expr1 debe ser tipo date/time y Expr2 debe ser tipo time. Por ejemplo:

select subtime(hora_salida,hora_entrada) from tabla_tiempo where codigo_usuario=01.

Supongamos hora de entrada a las 16:15:30 (4 y cuarto de la tarde con 30 segundos) y hora de salida a las 18:30:30 (6 y media de la tarde con 30 segundos), la consulta te va a devolver: 02:15:00 (2 horas, 15 minutos y 0 segundos).

Ahora que ya tenes el tiempo transcurrido desde que un cliente empezó a jugar hasta que va a salir, recuperas las horas con hour(time) y los minutos con minute(time) así:

select hour(subtime(hora_salida,hora_entrada)) from tabla_tiempo where codigo_usuario=01. Esto te va a devolver 2.

select minute(subtime(hora_salida,hora_entrada)) from tabla_tiempo where codigo_usuario=01. Esto te va a devolver 15.

Ya tenes las horas y los minutos por separado con estas dos consultas. Recuperas esta info en Java, las casteas a integer, las horas las multiplicas por 60 y le sumas el resultado de los minutos.

Continuando con el ejemplo, esto te va a devolver 120 minutos (las 2 horas) + 15 minutos= 135 minutos en total.

Aquí ya podes hacer un procedimiento en Java que te calcule el precio que el cliente deba pagar en base a los minutos y a la tarifa que tenes. Por ejemplo:

if (minutos_totales<=60)
cobro=25;
else
cobro=25+(minutos_totales-60)/*ya que según la tarifa que das se cobra a $1 el minuto*/


Espero te sirva.

Saludos
 
#3
Hola espero te sirva esto, aunque realmente considero que te faltan checar muchas cosas.. y tener muchas consideraciones, respecto a peso el minuto... mmm no estoy tan seguro puesto que tu tabla no refleja eso. Checa esto.. espero te sirva, es algo muy general, aun pueden validarse algunas cosas mas respecto a tus consideraciones.
import java.util.Calendar;

public class prueba {

public prueba(){

}

public static void main(String arg[]){
Calendar h = Calendar.getInstance();
// esto es lo q tiene la variable time: Wed Sep 29 17:22:17 CDT 2010
String hour[] = h.getTime().toString().split(" ");
for (int i = 0; i < hour.length; i++) {
//en la posición 3 esta tu hora
if( i == 3){
System.out.println(hour);
String m[]= hour.split(":");
int min = Integer.parseInt(m[1]);
int hr = Integer.parseInt(m[0]);
//haces una extraccion de la hora almacenada en la base de datos
//despues la almacenas en variables auxiliares
int horaDB=15;
int minDB=26;
//y la comparas con la de los minutos actuales
int tiempoTranscurridoHrs = hr - horaDB;
int tiempoTranscurridoMin = min - minDB;
if (tiempoTranscurridoMin < 0){
System.out.println("tiempoTranscurridoMinA : "+ tiempoTranscurridoMin );
tiempoTranscurridoMin = 60 + tiempoTranscurridoMin;
System.out.println("tiempoTranscurridoMinD : "+ tiempoTranscurridoMin );
}
int tiempoenPesos=0;
if (tiempoTranscurridoHrs >= 1 ){
if (tiempoTranscurridoMin <= 60 && tiempoTranscurridoMin != 0){
if (tiempoTranscurridoMin > 0 && tiempoTranscurridoMin <= 15)
tiempoenPesos += 15 ;
if (tiempoTranscurridoMin > 15 && tiempoTranscurridoMin <= 30)
tiempoenPesos += 30 ;
if (tiempoTranscurridoMin > 30 && tiempoTranscurridoMin <= 45)
tiempoenPesos += 45 ;
if (tiempoTranscurridoMin > 45 && tiempoTranscurridoMin <= 60)
tiempoenPesos += 60 ;
}
for (int j = 0; j < tiempoTranscurridoHrs; j++) {
tiempoenPesos += 25;
}
System.out.println("Pesos: "+ tiempoenPesos);
}
System.out.println("tiempo jugado :" +tiempoTranscurridoHrs + " horas " + tiempoTranscurridoMin + " minutos.");


}
}

}
}
 

jorlo82

Bovino maduro
#4
OK muchisimas gracias a los dos me han ayudado mucho voy a tratar de poner en práctica las dos formas ya que la idea de Salandrews siento que me va a servir mejor para el manejo de tablas pero también la idea de juanguiux creo que me va servir mucho para el manejo de las fechas de todas formas gracias a los dos y aquí les comento lo que me funcionó.
Muchas gracias
 

jorlo82

Bovino maduro
#5
OK muchisimas gracias a los dos me han ayudado mucho voy a tratar de poner en práctica las dos formas ya que la idea de Salandrews siento que me va a servir mejor para el manejo de tablas pero también la idea de juanguiux creo que me va servir mucho para el manejo de las fechas de todas formas gracias a los dos y aquí les comento lo que me funcionó.
Muchas gracias
 
Arriba