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 29-06-2005
didier didier is offline
Miembro
 
Registrado: jul 2003
Ubicación: Santiago, Chile
Posts: 56
Poder: 21
didier Va por buen camino
Question Resta de horas

Resta de horas
Estimados amigos del club como puedo restar dos horas
Ejemplo1 : 12:00 - 14:00 = 2 horas bien
Ejemplo2 : 08:00 - 12:00 = 4 horas bien
Ejemplo3 : 22:00 – 08:00 = 14 horas malo deberian ser 10 horas

Estoy trabajando con el componente TdatetimePicker

Si alguien me sugiere otra se lo agradezco

Gracias
Responder Con Cita
  #2  
Antiguo 29-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver qué tal esto:

Código Delphi [-]
 uses
   DateUtils;
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
   hora: TTime;
 begin
   // 2 más de la hora actual
   hora := IncHour(now, 2);
   // 2 menos de la hora actual
   hora := IncHour(hora, -2);
   // Mostramos la hora actual
   ShowMessage(TimeToStr(hora));
 end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 29-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Que tal esto otro:

Código Delphi [-]
Var
  Horas : Double;
Begin
  Horas := dtpHoraFinal.DateTime - dtpHoraInicio.DateTime;
  ShowMessage(Format('Las horas transcurridas (en decimal) son: %5.3d', [Horas * 24]));
  //mostrará 3.5 horas para 3:30, 10.3333 para 10:20, etc.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 29-06-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
El problema te ocurre porque debes estar restando la propiedad Time cuando en realidad debes utilizar la porpiedad DateTime.

Porque en tu caso las 08:00 son del día siguiente, y si no incluis la parte del día no se va a reflejar.

Suerte
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 30-06-2005
didier didier is offline
Miembro
 
Registrado: jul 2003
Ubicación: Santiago, Chile
Posts: 56
Poder: 21
didier Va por buen camino
resta de horas

Amigos del club he solucionado el problema de la siguiente manera, quizás no es la mas optima pero para mi problema esta OK, ya que necesito mostrar el día en un campo y la hora en otro aquí mando código por si alguien lo necesitara.

Gracias

Código Delphi [-]
//calcula cantidad de horas
 
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, DateUtils;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    DateTimePicker1: TDateTimePicker;
    DateTimePicker2: TDateTimePicker;
    Label2: TLabel;
    DateTimePicker3: TDateTimePicker;
    DateTimePicker4: TDateTimePicker;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  fecha : string;
  Tfecha1 : TDateTime;
  Tfecha2 : TDateTime;
begin
  fecha := datetostr(DateTimePicker1.Date) + ' ' +
           timetostr(DateTimePicker2.time);
  Label1.Caption := fecha;
  Tfecha1 := strtodatetime(fecha);
  Label2.Caption := datetimetostr(Tfecha1);

  fecha := datetostr(DateTimePicker3.Date) + ' ' +
           timetostr(DateTimePicker4.time);
  Label3.Caption := fecha;
  Tfecha2 := strtodatetime(fecha);
  Label4.Caption := datetimetostr(Tfecha2);

  Label5.Caption :=  inttostr(HoursBetween(tfecha2 , tfecha1));
end;

end.

Última edición por dec fecha: 02-01-2008 a las 17:44:20.
Responder Con Cita
  #6  
Antiguo 31-12-2007
angara angara is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
angara Va por buen camino
Restar horas

Probe el codigo me funciona para las horas pero en mi caso tambien nececito los minuto y segundos, para un sistema de control de ingreso de personal
gracias
Responder Con Cita
  #7  
Antiguo 02-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Para ese caso, tenés también las funciones MinutesBetween y SecondsBetween.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 05-01-2008
angara angara is offline
Miembro
 
Registrado: jun 2006
Posts: 22
Poder: 0
angara Va por buen camino
Gracias,
ahora solo tengo que realizar las operaciones correspondiente.
Responder Con Cita
  #9  
Antiguo 23-01-2008
saltamirano saltamirano is offline
Miembro
 
Registrado: jun 2007
Posts: 18
Poder: 0
saltamirano Va por buen camino
Resta de horas y minutos

Cita:
Empezado por angara Ver Mensaje
Probe el codigo me funciona para las horas pero en mi caso tambien nececito los minuto y segundos, para un sistema de control de ingreso de personal
gracias
Saludos amigos:

He revisado este hilo y me ha servido de mucha utilidad, tengo dos DateTimePicker, en los cuales se ingresa Hora de Inicio y Hora de Fin, en mi aplicación requiero restar las dos horas para obtener el tiempo ocupado. Tengo el siguiente código:

procedure TForm_Soporte.DateTimePicker_HraIniChange(Sender: TObject);
var dMiHraIni : TTime;
var HraIniStr: string;
begin
dMiHraIni := DateTimePicker_HraIni.Time;
HraIniStr := (TimeToStr(dMiHraIni));
self.DBEdit_HraIni.Text := HraIniStr;
end;


procedure TForm_Soporte.DateTimePicker_HraFinChange(Sender: TObject);
var dMiHraFin, tiempo1, tiempo2 : TTime;
var HraFinStr, dif_hra, dif_min, dif_seg, time: string;
var dif_hra_int, dif_min_int : integer;
var min_calc, seg_calc: integer;


begin
dMiHraFin := DateTimePicker_HraFin.Time;
HraFinStr := (TimeToStr(dMiHraFin));
self.DBEdit_HraFin.Text := HraFinStr;

tiempo1:= DateTimePicker_HraFin.Time;
tiempo2:= DateTimePicker_HraIni.Time;

dif_hra := inttostr(HoursBetween(tiempo2 , tiempo1));
dif_hra_int := strtoint(dif_hra);


if dif_hra_int > 0 then
begin
min_calc := ((MinutesBetween(tiempo2 , tiempo1))mod (dif_hra_int * 60));
dif_min := inttostr(min_calc);
end
else
begin
dif_min := inttostr(MinutesBetween(tiempo2 , tiempo1));
end;


if min_calc > 0 then
begin
seg_calc := (SecondsBetween(tiempo2 , tiempo1))mod (min_calc * 60);
dif_seg := inttostr(seg_calc);
end
else
begin
dif_seg := inttostr(SecondsBetween(tiempo2 , tiempo1));
end;
}
time := dif_hra + ':'+ dif_min + ':'+ dif_seg;
self.DBEdit_time.Text := time;
self.DBEdit_time.Show
end;


Al restar las horas por ejemplo: 8:00 a 14:30 el resultado es de: 6:29 y no
6:30 como debería ser.

Por fa si alguien tiene idea de lo que está pasando necesito una ayudita. Mil Gracias!!
Responder Con Cita
  #10  
Antiguo 23-01-2008
saltamirano saltamirano is offline
Miembro
 
Registrado: jun 2007
Posts: 18
Poder: 0
saltamirano Va por buen camino
Resta de horas y minutos

Cita:
Empezado por angara Ver Mensaje
Probe el codigo me funciona para las horas pero en mi caso tambien nececito los minuto y segundos, para un sistema de control de ingreso de personal
gracias
Saludos amigos:

He revisado este hilo y me ha servido de mucha utilidad, tengo dos DateTimePicker, en los cuales se ingresa Hora de Inicio y Hora de Fin, en mi aplicación requiero restar las dos horas para obtener el tiempo ocupado. Tengo el siguiente código:

procedure TForm_Soporte.DateTimePicker_HraIniChange(Sender: TObject);
var dMiHraIni : TTime;
var HraIniStr: string;
begin
dMiHraIni := DateTimePicker_HraIni.Time;
HraIniStr := (TimeToStr(dMiHraIni));
self.DBEdit_HraIni.Text := HraIniStr;
end;

procedure TForm_Soporte.DateTimePicker_HraFinChange(Sender: TObject);
var dMiHraFin, tiempo1, tiempo2 : TTime;
var HraFinStr, dif_hra, dif_min, dif_seg, time: string;
var dif_hra_int, dif_min_int : integer;
var min_calc, seg_calc: integer;

begin
dMiHraFin := DateTimePicker_HraFin.Time;
HraFinStr := (TimeToStr(dMiHraFin));
self.DBEdit_HraFin.Text := HraFinStr;
tiempo1:= DateTimePicker_HraFin.Time;
tiempo2:= DateTimePicker_HraIni.Time;

dif_hra := inttostr(HoursBetween(tiempo2 , tiempo1));
dif_hra_int := strtoint(dif_hra);

if dif_hra_int > 0 then
begin
min_calc := ((MinutesBetween(tiempo2 , tiempo1))mod (dif_hra_int * 60));
dif_min := inttostr(min_calc);
end
else
begin
dif_min := inttostr(MinutesBetween(tiempo2 , tiempo1));
end;

if min_calc > 0 then
begin
seg_calc := (SecondsBetween(tiempo2 , tiempo1))mod (min_calc * 60);
dif_seg := inttostr(seg_calc);
end
else
begin
dif_seg := inttostr(SecondsBetween(tiempo2 , tiempo1));
end;
}
time := dif_hra + ':'+ dif_min + ':'+ dif_seg;
self.DBEdit_time.Text := time;
self.DBEdit_time.Show
end;

Al restar las horas por ejemplo: 8:00 a 14:30 el resultado es de: 6:29 y no
6:30 como debería ser.

Por fa si alguien tiene idea de lo que está pasando necesito una ayudita. Mil Gracias!!
Responder Con Cita
  #11  
Antiguo 23-01-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
cuales son los segundos de los dos tiempos?

asegurate que sean cero sino te interesan.
__________________
[Crandel]
Responder Con Cita
  #12  
Antiguo 23-01-2008
saltamirano saltamirano is offline
Miembro
 
Registrado: jun 2007
Posts: 18
Poder: 0
saltamirano Va por buen camino
Resta horas y minutos

Gracias por tu preocupación amigo,

los segundos en la hora son cero, sin embargo no entiendo porque al restar las horas algunas veces saca datos exactos, pero en otros no como en el caso del ejemplo.

Mil gracias por su ayuda

Saludos
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 16:17:24.


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