Resta de horas
Resta de horas
Estimados amigos del club como puedo restar dos horas Ejemplo1 : 12:00 - 14:00 = 2 horas bien Ejemplo2 : 08:00 - 12:00 = 4 horas bien Ejemplo3 : 22:00 – 08:00 = 14 horas malo deberian ser 10 horas Estoy trabajando con el componente TdatetimePicker Si alguien me sugiere otra se lo agradezco Gracias |
Hola,
A ver qué tal esto:
|
Que tal esto otro:
Hasta luego. ;) |
El problema te ocurre porque debes estar restando la propiedad Time cuando en realidad debes utilizar la porpiedad DateTime.
Porque en tu caso las 08:00 son del día siguiente, y si no incluis la parte del día no se va a reflejar. Suerte |
resta de horas
Amigos del club he solucionado el problema de la siguiente manera, quizás no es la mas optima pero para mi problema esta OK, ya que necesito mostrar el día en un campo y la hora en otro aquí mando código por si alguien lo necesitara.
Gracias
|
Restar horas
Probe el codigo me funciona para las horas pero en mi caso tambien nececito los minuto y segundos, para un sistema de control de ingreso de personal
gracias |
Para ese caso, tenés también las funciones MinutesBetween y SecondsBetween.
Hasta luego. ;) |
Gracias,
ahora solo tengo que realizar las operaciones correspondiente. |
Resta de horas y minutos
Cita:
He revisado este hilo y me ha servido de mucha utilidad, tengo dos DateTimePicker, en los cuales se ingresa Hora de Inicio y Hora de Fin, en mi aplicación requiero restar las dos horas para obtener el tiempo ocupado. Tengo el siguiente código: procedure TForm_Soporte.DateTimePicker_HraIniChange(Sender: TObject); var dMiHraIni : TTime; var HraIniStr: string; begin dMiHraIni := DateTimePicker_HraIni.Time; HraIniStr := (TimeToStr(dMiHraIni)); self.DBEdit_HraIni.Text := HraIniStr; end; procedure TForm_Soporte.DateTimePicker_HraFinChange(Sender: TObject); var dMiHraFin, tiempo1, tiempo2 : TTime; var HraFinStr, dif_hra, dif_min, dif_seg, time: string; var dif_hra_int, dif_min_int : integer; var min_calc, seg_calc: integer; begin dMiHraFin := DateTimePicker_HraFin.Time; HraFinStr := (TimeToStr(dMiHraFin)); self.DBEdit_HraFin.Text := HraFinStr; tiempo1:= DateTimePicker_HraFin.Time; tiempo2:= DateTimePicker_HraIni.Time; dif_hra := inttostr(HoursBetween(tiempo2 , tiempo1)); dif_hra_int := strtoint(dif_hra); if dif_hra_int > 0 then begin min_calc := ((MinutesBetween(tiempo2 , tiempo1))mod (dif_hra_int * 60)); dif_min := inttostr(min_calc); end else begin dif_min := inttostr(MinutesBetween(tiempo2 , tiempo1)); end; if min_calc > 0 then begin seg_calc := (SecondsBetween(tiempo2 , tiempo1))mod (min_calc * 60); dif_seg := inttostr(seg_calc); end else begin dif_seg := inttostr(SecondsBetween(tiempo2 , tiempo1)); end; } time := dif_hra + ':'+ dif_min + ':'+ dif_seg; self.DBEdit_time.Text := time; self.DBEdit_time.Show end; Al restar las horas por ejemplo: 8:00 a 14:30 el resultado es de: 6:29 y no 6:30 como debería ser:mad:. Por fa si alguien tiene idea de lo que está pasando necesito una ayudita. Mil Gracias!! |
Resta de horas y minutos
Cita:
He revisado este hilo y me ha servido de mucha utilidad, tengo dos DateTimePicker, en los cuales se ingresa Hora de Inicio y Hora de Fin, en mi aplicación requiero restar las dos horas para obtener el tiempo ocupado. Tengo el siguiente código: procedure TForm_Soporte.DateTimePicker_HraIniChange(Sender: TObject); var dMiHraIni : TTime; var HraIniStr: string; begin dMiHraIni := DateTimePicker_HraIni.Time; HraIniStr := (TimeToStr(dMiHraIni)); self.DBEdit_HraIni.Text := HraIniStr; end; procedure TForm_Soporte.DateTimePicker_HraFinChange(Sender: TObject); var dMiHraFin, tiempo1, tiempo2 : TTime; var HraFinStr, dif_hra, dif_min, dif_seg, time: string; var dif_hra_int, dif_min_int : integer; var min_calc, seg_calc: integer; begin dMiHraFin := DateTimePicker_HraFin.Time; HraFinStr := (TimeToStr(dMiHraFin)); self.DBEdit_HraFin.Text := HraFinStr; tiempo1:= DateTimePicker_HraFin.Time; tiempo2:= DateTimePicker_HraIni.Time; dif_hra := inttostr(HoursBetween(tiempo2 , tiempo1)); dif_hra_int := strtoint(dif_hra); if dif_hra_int > 0 then begin min_calc := ((MinutesBetween(tiempo2 , tiempo1))mod (dif_hra_int * 60)); dif_min := inttostr(min_calc); end else begin dif_min := inttostr(MinutesBetween(tiempo2 , tiempo1)); end; if min_calc > 0 then begin seg_calc := (SecondsBetween(tiempo2 , tiempo1))mod (min_calc * 60); dif_seg := inttostr(seg_calc); end else begin dif_seg := inttostr(SecondsBetween(tiempo2 , tiempo1)); end; } time := dif_hra + ':'+ dif_min + ':'+ dif_seg; self.DBEdit_time.Text := time; self.DBEdit_time.Show end; Al restar las horas por ejemplo: 8:00 a 14:30 el resultado es de: 6:29 y no 6:30 como debería ser:mad:. Por fa si alguien tiene idea de lo que está pasando necesito una ayudita. Mil Gracias!! |
cuales son los segundos de los dos tiempos?
asegurate que sean cero sino te interesan. |
Resta horas y minutos
Gracias por tu preocupación amigo,
los segundos en la hora son cero, sin embargo no entiendo porque al restar las horas algunas veces saca datos exactos, pero en otros no como en el caso del ejemplo. Mil gracias por su ayuda Saludos ;) |
Creo que estas haciéndote un lio para la operación.
Con el ejemplo citado, podrías indicarnos que resultado te da esta operación:
Seguramente hay fracciones de segundo por allí involucradas.. ;) |
Hola
estaba revisando este hilo... y me queda una duda... el problema es que tengo la hora 09:16:00 pero lo tengo en formato de String... para convertirlo utilizo el StrToTime(hora) con HoursBetween(HoraFin, HoraIni) me entrega las horas que existen entre ambas... pero en que formato las estaría entregando ??? Salu2 |
Hola
Pues el formato lo puedes poner tu: Me parece. Saludos |
Cita:
Si yo quiero saber cuantas son las horas entre 9:00 AM y 9:59:59 AM esta funcion me devolvera 0. Cita:
|
Es decir...
tendria entonces que preguntar por los minutos transcurridos entre dos horas.. el valor dividirlo por 60 para así obtener la cantidad de horas y minutos... Ok... veré como realizo esto... Salu2:p:D |
|
Ya.. tengo lista una parte...
me explico... como los valores los tomo de un StringGrid, en donde tiene las sgtes columnas 0 -> Dias de Semana (Lun, Mar, Etc) 1 -> Fecha 2 -> Hora de Entrada1 3 -> Hora de Salida1 4 -> Hora de Entrada2 5 -> Hora de Salida1 6 -> Hora de Entrada3 7 -> Hora de Salida1 8 -> Suma de Horas Trabajadas El problema lo tengo cuando en una celda específica no existe nada... y preguntar por cada uno.. me dará mucho trabajo... existe una forma de que si el valor es vacio no me de error... y el otro problema que se me puede ocacionar es si solo existe hora de entrada y no de salida....???? o Viceversa Bueno, se supone que en la columna 8 del StringGrid debo poner esto (se que esta en minutos.. pero despues lo arreglo)
Espero me hayan entendido... Salu2:p:D |
|
se me ocurrio realizar lo sgte
pero igual me esta dando el sgte error el problema de esto es que hay dias en que no se marca tarjeta... u otras personas marcan solo 2 veces al día.. y otros 4 o 6 veces al día segun corresponda... raised exception class EConvertError with message "' is not a valid time'. Bueno..igual seguiré intentando... Salu2 |
Mira, seguramente te servirá el siguiente ejemplo que acabo de probar:
- Coloca dos TDateTimePicker en el Form, sus propiedades Kind en dtkTime y un botón con el siguiente código en su OnClick:
Y Listo, veras como funciona de bonito sin complicarte tanto la vida ;). |
Cita:
Si tienes razon... el problema es que los datos los capturo de un reloj control biometrico de estos entonces los datos que capturo son del sgte formato Código:
la primera columna es el tipo de entrada 0 -> salida 1 -> entrada la segunda columna es la ficha del trabajador la tercera columna es la fecha la cuarta columna es la hora entonces eso lo traspaso a un tabla de SQL... (Horario) y se me almacena de la sgte forma Hor_Numero -> Numero autoincremental Per_Nro -> ficha del trabajador Hor_Tipo -> Tipo de marcado (1 Entrada / 0 Salida ) Hor_Fecha -> Fecha y hora de marcado para rescatar los datos de un trabajador en especifico realizo una consulta así.. ej. Ficha 1015
con el siguiente codigo... traspaso los datos a un StringGrid... con el sgte formato: Dia Semana / Fehca / ent 1 / sal 1 / ent 2 / sal 2 / ent 3 / sal 3 / total hras el sgte codigo me genera un StringGrid de x Fila segun el rango de fecha que se haya señalado.. y además, me va agregando la el dia de la semana y la fecha en la primera y segunda columna del stringgrid
despues si ejecuto este codigo me empieza a buscar segun la ficha ingresada y segun la fecha de la columna fecha del StringGrid.. los datos y los va distribuyendo dentro del StringGrid
eso me entrega un resultado como el de la sgte imagen como veras pueden haber dias que no tenga nada de marcado.. otros que solo han marcado 4 veces.. y otros seis veces... Salu2:p:D PS: estube revisando tu programa.. me parece genial.. pero tu de antemano le pides si marca 1, 2 , 3 o 4... |
bueno mi pregunta es , como hora pero con segundos siempre en 00 sin tener q cambiarlo utilizando un dtpicker?, yo en la propiedad format del dtpicker coloq: HH:mm pero al gaurdar simpre em guarda con segundos en 52 y quisisera q lo guarde en 00 simpre, gracias a todos
|
Revisá la hora con la que inicia el componente. Seguramente esta tiene los 52 segundos (1:14:52), como el usuario solo puede cambiar horas y minutos, esto queda constante.
Otra opción es que trunques "a mano" los segundos que pueda traer... por ejemplo:
Podrías probar la función así:
Saludos. |
La franja horaria es GMT +2. Ahora son las 13:52:16. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi