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 03-12-2010
gonza_619 gonza_619 is offline
Miembro
 
Registrado: feb 2010
Posts: 157
Poder: 15
gonza_619 Va por buen camino
diferencia de campos hora y almacenarlo en hora

hola a todos, bien mi pregunta es que tengo dos campos hora y necesito hacer la diferencia entre ellas:
lo que hago es sacar en variables esos 2 campos y luego restarlos, pero me los devuelve en decimal, lo cual necesitaria que qedaran en tipo time, o pasar a time ese valor decimal.
Luego necesitaria saber como con consulta sql sumar un cmapo time y como me devolveria el resultado? gracias a todos
Bueno tambien quiero saber si al usar un hoursbetween entre dos campos time, por ej: 02:30:00 y 3:00:00 , el resultado seria 1? o me agrega los minutos?, como podria hacer para q me devuelva hora,min y seg para almacenarlo en campo time?gracias de nuevo

Última edición por gonza_619 fecha: 03-12-2010 a las 21:36:01.
Responder Con Cita
  #2  
Antiguo 03-12-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Hola amigo(a) gonza_619, creo que debes de ser más específico(a) y detallista al postear tus dudas, por ejemplo debes comentar si estás usando alguna base de datos y en tal caso especificar cuál de todas?(MySQL,MS sql server,Oracle,PostGree,Firebird,etc)
saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 03-12-2010
gonza_619 gonza_619 is offline
Miembro
 
Registrado: feb 2010
Posts: 157
Poder: 15
gonza_619 Va por buen camino
Perdon, estoy usando paradox y necesito hhacer la consulta en sql con query, para sumar campo tipo time, se que directamente no se podria
select sum(hora_entrada) as s from tabla..
como podria solucionarlo? gracias y perdon nuevamente
Responder Con Cita
  #4  
Antiguo 05-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gonza.

Revisá este [ enlace ]. En el, roman pone un código de ejemplo para paradox que podés adaptar a tu caso.

Saludos.
Responder Con Cita
  #5  
Antiguo 05-12-2010
gonza_619 gonza_619 is offline
Miembro
 
Registrado: feb 2010
Posts: 157
Poder: 15
gonza_619 Va por buen camino
bien lo probe funciona muestra los segundos pero no sale el encodetime
Código Delphi [-]
query1.Close;
query1.SQL.Text:='select sum(3600*extract(hour from hora_ent) + 60*extract(minute from hora_ent) + extract(second from hora_ent)) as total from cursohs where curso=1';
query1.Open;
yy:=query1.fieldbyname('total').asinteger;
edit5.Text:=inttostr(yy);
H:=yy div 3600;
M:=(yy mod 3600) div 60;
S:=(yy mod 3600) mod 60;
time:= EncodeTime(H, M, S, 0);
edit5.Text:=timetostr(time);

bien lo quiero mostrar en un edit pero salta error en encodetime= invalid argument to time encode gracias
Responder Con Cita
  #6  
Antiguo 05-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gonza.

Mirá, para sacarme la duda hice una tabla con un solo campo: 'Entrada' de tipo TTimeField.
Luego cargué aleatoriamente las horas con un for y probé el código puesto por roman. No obtuve ningún error.

Esta es la prueba que hice por si te ayuda en algo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  tt,h,m,s: Word;
  TotalEntrada: TTime;
begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('SELECT SUM( ');
  Query1.SQL.Add('3600*EXTRACT(HOUR FROM ENTRADA)+');
  Query1.SQL.Add('60*EXTRACT(MINUTE FROM ENTRADA)+');
  Query1.SQL.Add('EXTRACT(SECOND FROM ENTRADA)) ');
  Query1.SQL.Add('AS TOT_ENTRADA FROM PRUEBA');
  Query1.Open;
  tt:= Query1.FieldByName('TOT_ENTRADA').Value;
  h:=  tt div 3600;
  m:= (tt mod 3600) div 60;
  s:= (tt mod 3600) mod 60;
  TotalEntrada:= EncodeTime(h, m, s,0);
  Caption:= TimeToStr(TotalEntrada);
end;

Saludos.

Última edición por ecfisa fecha: 06-12-2010 a las 00:01:07.
Responder Con Cita
  #7  
Antiguo 06-12-2010
gonza_619 gonza_619 is offline
Miembro
 
Registrado: feb 2010
Posts: 157
Poder: 15
gonza_619 Va por buen camino
pues bien si salio bien, el problema es que suma la diferencia de horas, pero sirve. ahora tengo una consulta, bueno tengo almacenada horas pero en formato numerico en un campo es decir (1:30:00 = 1,5) bien necesitaria que el 1,5 se muestre como 1:30 al hacer una suma de esa columna numerica, es decir volverlo a tipo hora al resultado de la suma, si por ejemplo la suma da
tot= 20,5 que lo muestre en un edit.text=20:30, se podria? o como seria la cambio de formato? gracias espero puedan ayudarme
Responder Con Cita
  #8  
Antiguo 06-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gonza.

Según creo querés pasar un tipo Real a TTime, al menos en Delphi 7 no conozco una función predeterminada para hacerlo.

Pero podés pasar todo a milisegundos y sacar hora, minuto y segundos y luego convertir con DecodeDate.

Código Delphi [-]
...
uses DateUtils;

function FloatToTime(Value: Extended): TTime;
var
  h,m,s,ms: Word;
  aux: Cardinal;
begin
  // a Cardinal
  aux:= Trunc(Value)*3600000 + Trunc(Frac(Value)*3600000); 
  // hora
  h:= aux div 3600000;
  Dec(aux, h * 3600000);
  // minutos
  m:= aux div 60000;
  Dec(aux, m * 60000);
  // segundos
  s:= aux div 1000;
  Dec(aux, s * 1000);
  // a Time
  Result:= EncodeTime(h,m,s,0);
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessage(TimeToStr(FloatToTime(10.551))); // 10:33:06 a.m.
end;


Los milisegundos no los consideré, supongo que para horarios de entrada/salida no serán significantes.
Aunque lo podés implementar ampliando un poco el código.

Saludos.

Última edición por ecfisa fecha: 06-12-2010 a las 01:59:15.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
seleccionar hora en datetimepicker desde hora especifica gonza_619 Varios 4 21-11-2010 20:42:19
Hora GMT ea6zs Varios 2 14-12-2009 14:15:13
Convertir de hora GMT a hora local marceloalegre Varios 4 16-05-2007 23:35:58
Diferencia de hora entre servidor y estacion local ingel SQL 1 28-12-2006 16:59:41
Campos fecha / hora manu Impresión 2 04-02-2004 14:33:33


La franja horaria es GMT +2. Ahora son las 22:50:25.


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