Ver la Versión Completa : Problema con IncHour()
Anel Hernandez
10-10-2011, 14:18:36
Hola,
necesito sumar horas a una fecha inicial y luego extraer el dia del año.
Comienzo por el 13/7/2005 0:00 que es el 38546. Luego sumo horas con:
fechaAux:=inchour(fechaAux,1);
y extraigo el dia juliano con :
stringgrid7.cells[2,i]:=inttostr(DayOfTheYear(fechaAux));
y asi sucesivamente, me da bien hasta la hora 23, pues en la 24 no me da exacto, me da 38546.99999 y al extraer el dia me da el dia inicial. sin embargo al mostrar la fecha con:
:=datetostr(fechaAux)+' '+timetostr(fechaaux);
da el valor correcto de 14/7/2005 0:00.
Que puedo hacer para que al sumar horas, en la 24 me de el dia siguiente exacto?
gracias
ecfisa
10-10-2011, 23:18:38
Hola Anel.
No alcanzo a ver claramente la situación que planteas, pero realizá una prueba simple:
uses DateUtils;
procedure TForm1.Button1Click(Sender: TObject);
var
FechaAux: TDateTime;
i: Byte;
begin
FechaAux:= StrToDateTime('13/7/2005 00:00 p. m.');
with ListBox1.Items do
begin
Add(FormatDateTime('dd/mm/yyy hh:mm:ss', FechaAux));
Add('--------------------');
for i:= 1 to 26 do // 26 es arbitrario, podría ser 29 o 31...
begin
if i = 24 then Add('--------------------');
FechaAux:= IncHour(FechaAux);
Add(FormatDateTime('dd/mm/yyy hh:mm:ss', FechaAux));
end;
end;
end;
Como verás en el ejemplo, al sumar 1 a la hora 23 obtenes exáctamente el día siguiente con la hora 00:00, pero como te dije arriba no sé si estoy captando la esencia de tu problema.
Un saludo.
Anel Hernandez
11-10-2011, 00:11:56
Si,
lo ke planteas es correcto, pero si a la hora 24 despues de haber aplicado el incHour() le aplicas :=inttostr(DayOfTheYear(fechaAux)) para saber el dia juliano toma el numero del dia con .999 y te da el dia anterior no el ke empieza a las 0:00.
pruebalo y veras, porfa!
gracias!
ecfisa
11-10-2011, 00:27:31
Hola.
Ahora si te entiendo y es tál cual comentas. La verdad no he tenido ocasión de aplicar ese caso, seguramente sea el comportamiento de la función.
Supongo que una solución sería:
if Hora_a_Evaluar = 24 then
ShowMessage(IntToStr(DayOfTheYear(fechaAux) + 1));
Saludos.
Anel Hernandez
13-10-2011, 17:57:14
si, gracias,
lo ke la llamada aDayOfTheYear(fechaAux) la hago dentro de un writln que lleva varios string y copy y strtofloat etc y de esa manera se me complica el codigo.
si se pudiera corregir el delDayOfTheYear(fechaAux) para que quedara todo en una sola linea...
mil gracias al que aporte!
Anel Hernandez
31-10-2011, 18:49:06
al final he resuelto combrobando la hora despues del IncHour():
if HourOf(fechaAux)=0 then fechaAux:=round(fechaAux);
si lo hago antes corro el riesgo de errar si una serie comienza en una hora=0.
gracias
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.