ah, perdon.
Lo normal es usar la archifamosa función Now() para tenerlo todo, la fecha, hora y milisegundos, después si quieres cambiar un dato de la fecha, tiras de la unidad dateutils:
- recodeDate
- recodeTime
- encodeDateTime
- decodeDatetime
- dayOf
- monthOf
- yearOf
- incMonth
- incDay
- incHour
- incMinutes
- ...
(revisa la ayuda de DateUtils)
como ves tienes un monton de rutinas para trabajar cómodamente sin tener que codificar con string las fechas y horas.
Al grano en tu ejemplo:
Código Delphi
[-]
var vieja, nueva :Tdatetime;
min : int64; begin
vieja := now();
vieja := RecodeTime(vieja, 12, 0, 0, 0); nueva := RecodeTime(vieja, 13, 0, 0, 0 );
min := MinutesBetween(nueva, vieja);
Si no has tenido problemas hasta ahora, es porque no has calculado diferencias de horas estando de por medio el cambio de fecha, por ejemplo, desde las 23:00 hasta la 1:00 no van 2 horas de diferencia, Delphi te dirá que van 22 horas. Al no considerar la fecha, Delphi usa la misma fecha (30/12/1899 1:00 hasta el 30/12/1899 23:00) calculando la diferencia al revés, desde la 1 de la madrugada hasta las 23:00 horas
de ese mismo día
Al principio crees que una rutina como incDay es una tontería, es sólo sumar un día a la fecha anterior pero,¿y si el año es bisiesto? ¿o no lo es?, obviamente todos esos "peros" están ya controlados en esas rutinas.
Saludos