Ver Mensaje Individual
  #5  
Antiguo 28-03-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
De entrada olvida los tipos TDate y TTime, que son tipos especiales de la VCL equivalentes a TDateTime, pero en esencia útiles para asuntos de RTTI, como el diseño de componentes que lleven propiedades de fecha u hora. Mientras no sea éste el caso, emplea el tipo estándar TDateTime para manejar fechas, horas y combinaciones de ambas.

Cita:
Empezado por tiammat Ver Mensaje
[...] decidió que la hora debía ser expresada por un entero para determinar los minutos transcurridos desde la media noche, es decir de 0 a 1439, y en TODA la aplicación se maneja así.
Bien, a pesar de que esa decisión de tu patrón fue casi sin duda un error, cuentas con la función nativa MinuteOfTheDay para convertir cualquier hora TDateTime a un entero que indique la cantidad de minutos transcurridos desde la hora 0. ¿La usas actualmente? Y si no, ¿cómo estás haciendo la conversión TDateTime -> minutos Integer? Para hacer la conversión inversa (minutos Integer a TDateTime), lo único que necesitas es dividir ese entero entre la constante MinsPerDay. ¿Cómo lo haces actualmente?
Código Delphi [-]
Uses
  DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
Var
  I1, I2 :Integer;
begin
  I1 := MinuteOfTheDay (Time);  // Hora actual
  I2 := MinuteOfTheDay (0.5);  // Mediodía (720 minutos)
  ShowMessage (IntToStr (I1));
  ShowMessage (IntToStr (I2));
  ShowMessage (TimeToStr (I1 / MinsPerDay));
  ShowMessage (TimeToStr (I2 / MinsPerDay));
end;

Cita:
Empezado por tiammat Ver Mensaje
Me he visto en muchos problemas para calcular horas/fechas, sumar la hora a una fecha [...]
¿Podrías detallar tales problemas y poner alguna muestra del código fuente de la aplicación donde se presentan esas dificultades? Si, por ejemplo, deseas sumar una cantidad de minutos Integer a una fecha TDateTime, sólo tienes que usar la función nativa IncMinute:
Código Delphi [-]
Uses
  DateUtils;

procedure TForm1.Button2Click(Sender: TObject);
Var
  FH :TDateTime;
  I :Integer;
begin
  I := 720;  // Mediodía

  // Sumamos a la fecha actual 720 minutos para obtener el mediodía de hoy
  FH := IncMinute (Date, I);
  ShowMessage (DateTimeToStr (FH));
end;

Cita:
Empezado por tiammat Ver Mensaje
Espero haber sido claro, y si no lo fuí, avísame y te confundo más...
Más confusión, por favor. Hasta que lleguemos al meollo del asunto y determinemos qué convendría agregar a GHF. Si lo anterior no satisface del todo tus necesidades para manejo de fechas y horas, permíteme entender estas a fondo, no escatimes en texto y código para explicarlas.

Gracias, seguimos por aquí.
Responder Con Cita