Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con horas (https://www.clubdelphi.com/foros/showthread.php?t=67040)

gcc32 25-03-2010 11:20:53

Problema con horas
 
Hola, necesito una cosa un poco complicada. Haber si me explico:

Necesito una función que en funcion de la hora del dia que sea, se me guarde en una variable string esa hora redondeada, es decir, sin los segundos y redondeada a la centena, con una hora menos.

Ejemplo:

Si son las Now; => 10:27:56 Se me redondee y me de resultado 0920, es decir ademas del redondeo, con redondeo me refiero quitar los segundos y los : puntos ademas de quitarle 1 hora.

Mas ejemplos El rango de redondeo es de 10 min, como dividir el reloj cada 10 min y que la funcion me redondee a lo mas cercano a ese segmento de 10 min

11:37:52 -> 1030
08:05:12 -> 0700
23:15:35 -> 2210

Muchas Gracias, nose si me he explicado bien. parece un poco lioso.

Casimiro Notevi 25-03-2010 11:40:05

Es sencillo, aunque algo tedioso... o aburrido :)

¿Y qué llevas hecho?, ¿cómo lo has planteado?, pon algo de tu código para que le echemos un vistazo.

mcs 25-03-2010 11:48:37

Respuesta rápida (y quizá un poco incorrecta):

- Usa el DecodeTime para tener cuatro variables: hora, minuto, segundo, milisegundo
- segundo y milisegundo lo puedes ignorar
- Hora:=hora-1;
- minuto:= (minuto div 10) * 10;
- HoraString:=IntToStr(Hora)+IntToStr(Minuto)

Tienes que revisarlo, ya que entre las 00:00 y las 00:59h no funciona.

gcc32 25-03-2010 11:48:40

Algo de código
 
En realidad solo he conseguido quitar los : puntos pero a la hora del redondeo me pierdo

Código Delphi [-]
var
  Form1: TForm1;
  Result:integer;
  S1,S2,H0:String;
  I:Integer;

implementation

{$R *.dfm}



procedure TForm1.FormCreate(Sender: TObject);
begin 
LHora.Caption:=TimeToStr(Now);
  S1:=TimeToStr(Time);
  S2:='';
  I:=1;
  while (I<=Length(S1)) do begin
    if (S1[i]<>':') then
      S2:=S2+S1[i];
    Inc(I);
  end;
   Result:=StrToInt(S2);
   H0:='0940';
   WB.Navigate('pagina'+H0+'.gif');
end;

end.

BrunoBsso 25-03-2010 13:41:23

No sé si te guste, pero hice una función a tu medida (y hasta con tu nick)
Código Delphi [-]
function gcc32(Horario:TTime):String;
var
  I:Integer;
  HoraAux,S:String;
begin
  Result:='';
  HoraAux:=TimeToStr(Horario);
  S:='';
  I:=1;
  while (HoraAux[i] <> ':') do begin
    S:=S+HoraAux[i];
    Inc(I);
  end;
  S:=IntToStr(StrToInt(S)-1); //Le saco 1 a la hora
  if (S[1]='-') then //Verifico un posible número negativo
    S:='23';
  if (Length(S)=1) then //Verificar existencia de ceros (8 -> 08)
    S:='0'+S;
  Result:=Result+S;
  //Ya puse la hora
  S:='';
  Inc(I);
  while (HoraAux[i] <> ':') do begin
    S:=S+HoraAux[i];
    Inc(I);
  end;
  if (Length(S)=2) then
    S[2]:='0'
  else
    if (Length(S)=1) then
      S:='0'+S;
  Result:=Result+S;
  //Tengo los minutos
end;
Creo que es fácil de entender, porque es todo código a mano.
Aunque siempre la mejor alternativa es usar lo que te brinda el lenguaje, esta creo que no es una mala alternativa.
Saludos!

EDIT: ya verifica números negativos, ahora anda joya.

Caro 25-03-2010 16:26:22

Hola gcc32, yo utilizaría la función IncMinute de la unit DateUtils, lo que hace esa función es incrementar o decrementar la cantidad de minutos que quieras, tu codigo quedaría así:

Código Delphi [-]
uses DateUtils;
............................
 
var
 Hora : TTime;
 CantMinutos : Integer;
begin
 CantMinutos := 60;
 Hora := IncMinute(Now, -CantMinutos); 
 showmessage(TimeToStr(Hora));
 .......................................

Saluditos

Caro 25-03-2010 16:32:03

Hola de nuevo, para reemplazar los : utiliza mejor la función StringReplace:

Código Delphi [-]
var
  Hora : TTime;
  CantMinutos : Integer;
  HoraStr : String;
begin
  CantMinutos := 60;
  Hora := IncMinute(Now, -CantMinutos); 

  HoraStr := StringReplace(TimeToStr(Hora),':','',[rfReplaceAll]);

  //Y para quitar los segundos puedes utilizar las funciones Delete o Copy
  Delete(HoraStr, Length(HoraStr)-1,2);
  showmessage(HoraStr);

Saluditos

gcc32 25-03-2010 17:57:03

Muchas Gracias
 
Muchisimass Gracias a los 2


La franja horaria es GMT +2. Ahora son las 15:55:40.

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