Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   convertir un valor time a un numerico (https://www.clubdelphi.com/foros/showthread.php?t=1276)

suppergus 10-06-2003 01:04:46

convertir un valor time a un numerico
 
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.

Código:

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:
Cita:

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


La franja horaria es GMT +2. Ahora son las 18:26:21.

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