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 25-03-2010
gcc32 gcc32 is offline
Registrado
 
Registrado: ene 2009
Posts: 9
Poder: 0
gcc32 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 25-03-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #3  
Antiguo 25-03-2010
mcs mcs is offline
Miembro
 
Registrado: may 2007
Ubicación: Girona
Posts: 229
Poder: 18
mcs Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 25-03-2010
gcc32 gcc32 is offline
Registrado
 
Registrado: ene 2009
Posts: 9
Poder: 0
gcc32 Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 25-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
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.

Última edición por BrunoBsso fecha: 25-03-2010 a las 13:47:08. Razón: Negativos...
Responder Con Cita
  #6  
Antiguo 25-03-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #7  
Antiguo 25-03-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 25-03-2010
gcc32 gcc32 is offline
Registrado
 
Registrado: ene 2009
Posts: 9
Poder: 0
gcc32 Va por buen camino
Muchas Gracias

Muchisimass Gracias a los 2
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
De 12 a 24 horas sancarlos MS SQL Server 3 03-07-2008 17:21:00
Problema Fechas y Horas tarco35 Varios 2 31-12-2006 20:41:48
Problema con horas akela Varios 2 18-10-2005 15:43:39
problema con mascara de fechas y horas Choclito Firebird e Interbase 2 21-02-2005 21:20:42
SQL y las horas FRANKER SQL 2 14-05-2003 10:50:40


La franja horaria es GMT +2. Ahora son las 22:16:27.


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