Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-06-2003
suppergus suppergus is offline
Miembro
 
Registrado: jun 2003
Ubicación: México D. F.
Posts: 16
Poder: 0
suppergus Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 10-06-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 22
Bacterion Va por buen camino
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...
Responder Con Cita
  #3  
Antiguo 10-06-2003
supperguss supperguss is offline
Registrado
 
Registrado: may 2003
Ubicación: México d.f.
Posts: 4
Poder: 0
supperguss Va por buen camino
Arrow

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
Responder Con Cita
  #4  
Antiguo 11-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
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.
__________________
Guía de Estilo
Responder Con Cita
  #5  
Antiguo 11-06-2003
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
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.
Responder Con Cita
  #6  
Antiguo 12-06-2003
supperguss supperguss is offline
Registrado
 
Registrado: may 2003
Ubicación: México d.f.
Posts: 4
Poder: 0
supperguss Va por buen camino
Thumbs up

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!!!
Responder Con Cita
  #7  
Antiguo 13-06-2003
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
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 !!!
Responder Con Cita
  #8  
Antiguo 13-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
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.
__________________
Guía de Estilo
Responder Con Cita
  #9  
Antiguo 13-06-2003
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Pues yo lo siento pero prefiero utilizar el MinutesBetween, me parece más claro

Saludos
Responder Con Cita
  #10  
Antiguo 13-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
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.
__________________
Guía de Estilo
Responder Con Cita
  #11  
Antiguo 24-06-2003
intedeme intedeme is offline
Miembro
 
Registrado: jun 2003
Ubicación: Pedernales
Posts: 13
Poder: 0
intedeme Va por buen camino
Tengo dos Campos HoraFinal - HoraInicial, que debo de hacer para que me diga los minutos o horas transcurridos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:35:40.


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
Copyright 1996-2007 Club Delphi