Delphi - horas que excedan las 24:00

 
Vista:

horas que excedan las 24:00

Publicado por Rodolfo (27 intervenciones) el 22/12/2003 22:43:36
Una super consulta

Estoy acumulando las horas trabajadas día a día en una tabla.

Var
H1:TdateTime;
Vhora: String[5]:
...
{ en bucle }
h1:=h1+StrToDateTime(hora_de_dia);
{ h1 es mi total de horas en periodo }
...
{ lo registro en la tabla adecuada }
minutos:=round(h1*1440)
horas:=minutos div 60;
minutos:=minutos mod 60;
registro:=Format(‘%.2d:%.2d’,[horas,minutos]);

Hasta allí todo bien, tengo el total de horas trabajadas en un periodo de días determinado en h1.

Pero mi problema radica cuando quiero recoger esa información para utilizarla en otras cosas como reportes o mas sumatorias.
Como ven, ese tipo de totales, exceden las 24 horas y cuando recojo la info con

H2:=StrToDateTime(registro);

Me sale un mensaje de error que dice algo así:

Raises excepcion class EconvertError with message ’25:10’ is not a valid date and time ...

Como recupero ese valor que dice no es un valido formato de fecha y hora?

Muchas Gracias.

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

RE:horas que excedan las 24:00

Publicado por mamcx (533 intervenciones) el 22/12/2003 23:33:11
Pues si se pueden trabajar mas de 24 horas, el algoritmo es erroneo: Debe dar en dias ej: 1 d 1:15 horas. Deberias chequear si es mayor a 24 y hacerlo recursivo. Incluso, deberias darlo hasta meses si es el caso.

Por otro lado, para capturar el error, chequea las ayudas el tema: Try..except
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:horas que excedan las 24:00

Publicado por Rodolfo (27 intervenciones) el 22/12/2003 23:40:34
pero me funciona hasta cierto nivel.
No necesito los dias ni meses, simplemente las horas.
Al acumular las horas obtengo en algunos casos hasta 300 horas trabajadas, y esta bien.

Solo necesito saber como recojer esa cadena (STRING) y regresarlo de nuevo a una variable de tipo DateTIme

Pues Estoy revisando y Format(parametros1,[v1,v2]) trabaja con recibir formato numerico y FORMATDATETIME('hh:mm',vdatetime) trabaja con TDateTIme y en la base de datos tengo String.

Uso Delphi 7.0

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:horas que excedan las 24:00

Publicado por mamcx (36 intervenciones) el 23/12/2003 03:42:34
Entonces prueba con las rutinas de DateUtils

IncHours

o mira en el apartado Datetime routines de las ayudas

La idea es hacer sumatoria entre fechas y luego retornar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:horas que excedan las 24:00

Publicado por Rodolfo (27 intervenciones) el 23/12/2003 16:34:18
Alguien que sepa como pasar una cadena (String) de formato (hhh:mm) que exceda las 24:00 a una variable TDateTime por favor?

Muchisimas gracias de antemano.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:horas que excedan las 24:00

Publicado por mamcx (36 intervenciones) el 23/12/2003 17:41:35
Vuelvo a repetir: TIENES que hacer una funcion que tenga en cuenta dias, mese O puedes usar las funciones aritmeticas sobre fechas Y retornar la cadena sobre la fecha calculada. No hay otra, a menos que te consigas la funcion hecha.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:horas que excedan las 24:00

Publicado por Rodolfo (1 intervención) el 23/12/2003 18:21:45
Recibi un correo con la siguiente idea.

Registrar los totales no en tipo String, hacerlo en tipo numero con flotante, es decir dejar de lado la conversion con FortaDateTime, luego recien cuando necesite la informacion evito el tener que hacer la inversa que aun no se como se podria hacer.

Es mas facil convertir del formato numero a DateTime (porque es un numerico) que convertir un String a un datetime (siempre y cuandoe xceda las 24:00 horas.

despreciar el DateTImeToStr de la siguiente rutina:

while not table2.Eof do
begin
htot:=htot+StrToDateTime(table2.FieldbyName('c_htot').AsString);
he25:=he25+StrToDateTime(table2.FieldbyName('c_e25').AsString);
he35:=he35+StrToDateTime(table2.FieldbyName('c_e35').AsString);
httar:=httar+StrToDateTime(table2.FieldbyName('c_tarde').AsString);
inc(vdias);
Table2.Next; { SIGUIENTE REGISTRO DE CALCULO RELACIONADO }
end;

Ahora considerar que un DateTime puede ser convertido a un Float.

Var
h:DateTime
Begin
h:=StrToDateTime(Edit1.Text);
ShowMessage(FloatToStr(h));
End;

Bueno. Usare esa forma, comparto la informacion que recibi para quien lo considere util.

Saludos

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar