Fórum como somar horas que ultrapassem 1 dia. #388408
13/10/2010
0
Estou fazendo um sistema de falhas e preciso e preciso computar quanto tempo essa falha perdurou.
Já procurei sobre isso em alguns foruns mas sempre acho soluções usando hourbetween. Sei que essa solução pode resolver o meu problema mas não sei como aplicá-la. o meu problema é o seguinte, exemplo:
Uma falha ocorreu na data 13/10/2010 às 13:25:10h e só foi normalizada no Dia 14/10/2010 às 15:33:15h.
com o exemplo acima, o programa deve armazenar na variável "TempoIndisponivel" o total de horas em que a falha existiu, que nesse caso, preciso que seja 26:08:05h, ou seja, 26 horas, 8 minutos e 5 segundos.
Preciso que o sistema entenda que passaram-se 24 horas do início da falha e que some com as horas, minutos e segundos restantes do horário em que a falha terminou.
Estou usando Banco ACCESS o campo da Data inicial e final no access está com formato dd/mm/aaaa.
O campo hora inicial e final possuem formato hh:mm:ss.
Ainda não estou usando nenhum código para fazer isso. Tentei alguns mas não funcionaram. O método de acesso ao ACCESS é ADO.
Muito Obrigado se alguém puder ajudar!
Rafael
Curtir tópico
+ 0Posts
14/10/2010
Leonardo Xavier
Gostei + 0
14/10/2010
Eriley Barbosa
Gostei + 0
14/10/2010
Rafael
Gostei + 0
20/10/2010
Rafael
Segue o código para caso alguém também esteja precisando.
[CODE]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses DateUtils;
{$R *.dfm}
//Função converter Segundos para Horas
function Seg_Hora( Seg:LongInt ):string;
Var Hora,Min:LongInt;
Tmp : Double;
begin
Tmp := Seg / 3600;
Hora := Round(Int(Tmp));
Seg := Round(Seg - (Hora*3600));
Tmp := Seg / 60;
Min := Round(Int(Tmp));
Seg := Round(Seg - (Min*60));
Result := FormatFloat( '00', Hora )+ ':' + FormatFloat( '00', Min ) + ':' + FormatFloat( '00', Seg );
end;
procedure TForm1.Button1Click(Sender: TObject);
var total : int64; ini, fim : TDateTime;
begin
ini := strtodatetime(Edit1.Text);
fim := strtodatetime(Edit2.Text);
total := SecondsBetween(ini,fim); // retorna o numero de segundos entre a data_hora inicial e a data_hora final
Label1.Caption := 'Tempo Total Indisponivel : '+ seg_hora(total);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
edit1.Text := '13/10/2010 13:25:10';
edit2.Text := '14/10/2010 15:33:15';
end;
end.
[CODE]
Valeu!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)