Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Como Somar Horas, min, sec. Ex: 34:23:19


Rafael Ricardo

Pergunta

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.

encontrei a função abaixo do Micheus que é usuário desse mesmo fórum mas essa função não calcula os segundos. Se alguém puder me ajudar e mostrar um exemplo em um button eu agradeço muito!

-----------------------------------------------------------------------------------------------------------

function FullTimeToStr(SUMTime: TDateTime): string;

var

StrHor,

StrMin :string;

TotHor :double;

begin

TotHor := SUMTime *24;

if (TotHor -Trunc(TotHor)) > 0.9999 then

TotHor := Round(TotHor);

StrHor := FormatFloat('##0:', Int(TotHor));

StrMin := FormatDateTime('nn:ss', Frac(TotHor)/24);

Result := StrHor +StrMin;

end;

-----------------------------------------------------------------------------------------------------------

Muito Obrigado se alguém puder ajudar! :huh:

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

A lógica é que o tempo total esteja em segundos, para facilitar o calculo

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.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
A lógica é que o tempo total esteja em segundos, para facilitar o calculo

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.

abraço

Impressionante como conhecimento é tudo!! :blink:

Ontem eu consegui escrever um código sozinho que conseguiu fazer exatamente o que eu queria, terminei às 03:00 da Madruga :wacko: . Já estava me achando o "tal" quando retornei ao forum e vi a resposta do Jhonas acima com 50 linhas amenos que o código que eu fiz e produzindo o mesmo resultado :blink: . Como eu não tenho tanto conhecimento precisei fazer 2 procedures e uma codificação final em um button que utiliza em conjunto os comandos do próprio botão com as 2 procedures. Deu um total de 72 linhas.

Depois do exemplo acima tenho até vergonha de postar o código que eu usei :rolleyes: .

Para os curiosos e iniciantes que quiserem se familiarizar com conversões e quiserem queimar um pouco a pestana o código fonte com o executável Baixem o projeto aqui

Em fim, Muito Obrigado Jhonas!! Posso dizer que salvou meu projeto!! Irei usar seu exemplo pois o meu ficou um pouco grande já que tive que fazer na "munheca" todos os cálculos de horas entre dias, coisa que a sua function facilitou bastante!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...