El tipo TDateTime es un número del tipo Double cuya parte entera se utiliza para la parte de la fecha y la parte fraccionaria para la hora.
Free Pascal dispone de una gran cantidad de funciones para el tratamiento de fechas y horas en la unidad dateutils.
En este ejemplo solo veremos como calcular la diferencia horaria, la parte time, de dos TDateTime y también la cantidad de horas entre dos fechas también del tipo TDateTime.
Lo primero que notamos es que el cálculo del tiempo transcurrido entre las 19:00 y 02:27 es correcto, 7 horas y 27 minutos.
Lo segundo, es que si se tomarán en cuenta los días de las fechas, las horas transcurridas serían 55 y 27 minutos.
Lo tercero, la cantidad de horas es correcta, 55, pero se ignoran los minutos.
Pero según lo que se necesite, esto puede servir o resultar insuficiente, en tal caso, hay que buscar la combinación de funciones que nos resuelvan el tema y de última siempre están las funciones Decode* y Encode* mediante las cuales, podemos hacer lo que queramos, aunque deberemos escribir más código.
El código del ejemplo:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, dateutils;
type
{ TForm1 }
TForm1 = class(TForm)
btnDiferencia: TButton;
btnCantidad: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure btnCantidadClick(Sender: TObject);
procedure btnDiferenciaClick(Sender: TObject);
private
fechainicio, fechafin:TDateTime;
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.btnDiferenciaClick(Sender: TObject);
var
Diferencia:TDateTime;
begin
fechainicio:=StrToDateTime('05-07-2017 19:00');
fechafin:=StrToDateTime('08-07-2017 02:27');
Diferencia:=fechafin-fechainicio;
Label3.Caption:=TimeToStr(TimeOf(Diferencia));
end;
procedure TForm1.btnCantidadClick(Sender: TObject);
var
canthoras:Int64;
begin
fechainicio:=StrToDateTime('05-07-2017 19:00');
fechafin:=StrToDateTime('08-07-2017 02:27');
canthoras:=HoursBetween(fechafin,fechainicio);
Label4.Caption:=IntToStr(canthoras);
end;
end.
La función TimeOf recibe como parámetro un valor del tipo TDateTime y retorna la parte horaria, es decir, le pasamos un TDateTime y nos devuelve un TTime, por tal motivo utilizamos TimeToStr en lugar DateTimeToStr.
La función HoursBetween recibe como parámetros dos valores del tipo TDateTime y retorna un valor del tipo Int64 que serán la cantidad de horas entre las fechas.
Código fuente: Diferencia horaria entre fechas.7z
o en GitLab
No hay comentarios:
Publicar un comentario