Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Hora en entero a hora en decimal. (https://www.clubdelphi.com/foros/showthread.php?t=82008)

TiammatMX 14-01-2013 21:39:26

Hora en entero a hora en decimal.
 
Jóvenes Delphineros, buena tarde...

Les platico mi problema. Resulta que en los desarrollos de la empresa manejamos por separado la fecha como un número Double y la hora como un entero resultado del cálculo de las horas y minutos transcurridos desde la medianoche (00:00) del día que se trate.

Como sabemos, el tipo TDateTime es un número doble conformado por la fecha (la parte entera del número) y la hora en precisión de hasta milisegundos (la parte en decimales del número); pero ahora se me viene el problema que debo obtener DE REGRESO el valor TDateTime a partir de sumar la fecha (un número entero, en éste caso) a OTRO NÚMERO ENTERO que significa la hora (un número entero con precisión de hasta minutos) en el siguiente formato:

Código Delphi [-]
iLaHora := 675;

Siendo 675 el equivalente a las 11:15 am. Mi problema principal ahora se remite a obtener el número decimal que equivalga a las 11:15 para sumarlo al número entero que me significa la fecha (quedando como 41860.58101212343564 o algo así) y poder hacer cálculos a partir de éste número.

Intenté obtener la hora con ésta operación:

Código Delphi [-]
dLaHora := (iLaHora /60)*0.01);

y

Código Delphi [-]
dLaHora := (iLaHora /60);

... pero en ambos casos, el número NO REPRESENTA las 11:15 am.

¿Podría alguien orientarme en cómo resolver ésto? Es decir, obtener la hora en un número decimal a partir de un número entero.

Agradeciendo de antemano su atención, y en espera de sus ideas, por locas que puedan parecer.

mamcx 14-01-2013 21:55:41

En terminos generales, es pesima idea hacer calculos manuales de fechas y horas. Es algo particularmente lleno de problemas, casos especiales y demas. Osea, usa datetime y las funciones hechas para operar sobre ellas.

p.D: Simpre me ha parecido increible que se "inventen" tipos de datos especiales en vez de usar los nativos del lenguaje/base de datos. Porque lo haces? Nunca he sabido de un verdadero argumento, y solo existe 1 caso donde es vagamente justificable: hacer un datamart/olap

TiammatMX 14-01-2013 21:59:34

Cita:

Empezado por mamcx (Mensaje 453389)
....y solo existe 1 caso donde es vagamente justificable...

... y falta el otro caso donde es plenamente justificable: Cuando así te lo ordena el que firma los cheques de pago... :p:D:D:D

Al González 14-01-2013 22:49:45

Si quieres convertir 675 unidades minutos en la parte fraccionaria que representaría dentro de un TDateTime, basta con una simple regla de tres (que en realidad se reduce a una simple división):
Código:

    1 día                  X
------------------    -----------
MinsPerDay minutos    675 minutos

X = (675 * 1) / MinsPerDay = 675 / MinsPerDay = 0.46875 días

Sumas ese valor a la fecha entera y le estará dando las 11:15 AM a dicha fecha. La constante Delphi MinsPerDay (de la unidad SysUtils) tiene un valor de 1440 (cantidad de minutos en un día).

¿Pos pa' quién trabajas Felipe? :p

TiammatMX 15-01-2013 03:52:45

Cita:

Empezado por Al González (Mensaje 453395)
...¿Pos pa' quién trabajas Felipe? :p...

Para alguien que en su momento consideró que manejar la hora como entero era mejor que usar TDateTime... :cool::p:D:D

TiammatMX 15-01-2013 18:19:40

Cita:

Empezado por tiammat (Mensaje 453403)
Para alguien que en su momento consideró que manejar la hora como entero era mejor que usar TDateTime... :cool::p:D:D

OK, resuelto el problema gracias a mi compadre AlGonzález. El código queda así:

Código Delphi [-]
function TformReporteArchivoClinico.RevisarHorario(dFecha: TDateTime;iHoraOut: integer): Integer;
begin
   RevisarHorario := HoursBetween(Trunc(DataSys.GetServerDate)+((GetSysMinute/60)/24),Trunc(dFecha)+((iHoraOut/60)/24));
end;

Muchas gracias por sus aportaciones.


La franja horaria es GMT +2. Ahora son las 18:58:02.

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