Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
Problema con IncHour()

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
Responder Con Cita
  #2  
Antiguo 10-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Anel.

No alcanzo a ver claramente la situación que planteas, pero realizá una prueba simple:
Código Delphi [-]
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 10-10-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
re

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!
Responder Con Cita
  #4  
Antiguo 10-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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:
Código Delphi [-]
 
  if Hora_a_Evaluar = 24 then
    ShowMessage(IntToStr(DayOfTheYear(fechaAux) + 1));

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 13-10-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
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!
Responder Con Cita
  #6  
Antiguo 31-10-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:47:10.


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
Copyright 1996-2007 Club Delphi