PDA

Ver la Versión Completa : convertir un valor time a un numerico


suppergus
10-06-2003, 01:04:46
Hola a todos!!!

necesito algo de ayuda, tengo un campo llamado "consumo" en una tabla en de tipo ttime dentro del programa este campo trabaja asi:

consumo:=hora_final-hora_inicial;

hasta ahi todo va bien mi problema que el valor obtenido lo tengo que manipular aritmeticamente y no encuentro la forma ojala alguien pueda ayudarme...

gracias

Bacterion
10-06-2003, 09:30:57
Si tienes Delphi 6 o superior puedes usar la unidad DateUtils en la que puede hacer operaciones como IncDay, IncHour, IncSecond... (incrementan o decrementan), comparaciones...

Si no, puedes convertirlo en TTimeStamp que te da el tiempo en milisegundos y días...

No se, si das algún ejemplo de lo que quieres hacer...

supperguss
10-06-2003, 23:44:10
antes que nada agradezco que hayas respondido a mi pregunta..

veraz trabajo en un programa que registrara a usuarios que harán uso de unas máquinas en base a una tarifa segun el tiempo que las usen (minutos), al momento de registrarse se captura un campo "hor_inicial" en una tabla1 (paradox) lo mismo ala hora que termina se captura el campo "hor_final" el campo "consumo" resulta de la resta de "hor_final y hor_inicial" estos tres campos son del tipo TTime, ahora bien necesito convertir el valor del campo consumo para poder multiplicarlo por el campo tarifa que es tipo numerico

trabajo con delphi4

andres1569
11-06-2003, 01:46:32
Aquí va una función recién salida del horno.

Lo que hace es devolver los minutos transcurridos entre dos fechas (TDateTime). Quizás deberías plantearte que el campo Consumo fuera un Integer pues almacena minutos, no una fecha ni un instante.


function MinutosEntreFechas (d1, d2 : TDateTime) : Longint;
var
ds1, ds2 : TTimeStamp;
begin
// aquí se podría comprobar que d2 es mayor que d1
ds1 := DateTimeToTimeStamp (d1);
ds2 := DateTimeToTimeStamp (d2);
if ds2.Date = ds1.Date then
result := (ds2.Time - ds1.Time) div 60000
else result := ((ds2.Time + 86400000 - ds1.Time) div 60000) + (ds2.Date - ds1.Date - 1) * 1440;
end;


Supongo que capturas cada instante mediante la función Now, que devuelve Fecha + Hora.

José Luis Garcí
11-06-2003, 10:14:31
Yo tengo la siguiente función para convertir tiempo en segundos pero variandola apenas la conviertes a minutos o a horas, la fun ción es:


function TiempoDes(tirmpo:TDateTime): string;
var
Hour,min,sec,msec : Word;
conttirmpo:integer;
begin
DecodeTime(tirmpo,hour,min,sec,msec);
conttirmpo:=(hour * 3600)+(Min * 60)+sec;
Result := inttostr(conttirmpo);
end;

como puedes ver es muy simple y te devuelve un valor str, si la varias a penas te devolveria valor integer, y ya a qui la tratas como cualquier operación normal, por lo que entiendo tendrias que usarla mas o menos asi

Tform1.button1Click(sender)
begin
label1.caption:=inttostr(strtoint(tiempodesc((table1.hotafinal.value-table1.horainicial.value)))*srttoint(edit1.text));
end;
donde edit1 es el valor por el que quieres multiplicar, ojo recuerda que si es para $ deves usar strtoFloat y floattostr, espero te valga todo el tema.

Un saludo desde Canarias.

supperguss
12-06-2003, 04:06:13
gracias

me ha funcionado muy bien lo del DecodeTime eso no lo habia intentado y con algunas variaciones en el codigo ya se solulciono el problema...

un saludo!!!

Mick
13-06-2003, 16:51:03
Los metodos aportados aunque validos, exigen la realizacion de operaciones superfluas, marean la perdiz por asi decirlo ;), yo sugeriria algo como:

Horas:= (TimeEnd-TimeStart)*24;

Minutos:= (TimeEnd-TimeStart)*24*60;

Segundos:= (TimeEnd-TimeStart)*24*60*60;

Salud2 !!!

andres1569
13-06-2003, 20:01:22
Lo que dice Mick, aparte de elegante y eficaz, es lo más natural, mira que a veces nos rompemos la cabeza en hacer las cosas difíciles. :) :)

__marcsc
13-06-2003, 20:32:50
Pues yo lo siento pero prefiero utilizar el MinutesBetween, me parece más claro :p

Saludos ;)

andres1569
13-06-2003, 21:10:53
Marcsc dijo:
Pues yo lo siento pero prefiero utilizar el MinutesBetween, me parece más claro
Si la versión de Delphi lo permite, mejor usar MinutesBetween, yo me refería a usar el código de Mick en vez de los métodos expuestos aquí, entre ellos uno mío, que marean demasiado la perdiz.

intedeme
24-06-2003, 17:27:35
Tengo dos Campos HoraFinal - HoraInicial, que debo de hacer para que me diga los minutos o horas transcurridos