Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar TimetoStr y viceversa (https://www.clubdelphi.com/foros/showthread.php?t=67029)

gcc32 24-03-2010 21:45:37

Cambiar TimetoStr y viceversa
 
Hola necesito que teniendo la hora actual con la funcion now; me la transforme a una variable de tipo string o integer, tengo entendido que se hace

var a:TTIME;

begin
a:=now;
label1:=TimetoStr(a);

end;

No me deja compilar, ¿alguien sabe por que? ¿Se necesita algo en uses para realizar este tipo de cambio de variable??

Muchas Gracias

marcoszorrilla 24-03-2010 21:54:08

Now devuelve la fecha y la hora, no la hora solamente, por lo tanto tienes que declarar una variable del tipo DateTime.

Var
x:TdateTime;

Pero para seguir con lo que tu quieres más fácil sería:

Código Delphi [-]
a:=Time;
        label1:=TimetoStr(a);

Un Saludo.

gcc32 24-03-2010 22:06:26

No resuelve pero gracias
 
Me sigue saliendo el mismo error cuando ejecuto;

Código Delphi [-]
var s:string;
    hora2:Ttime;

begin
    hora2:=Time;
    s:=TimeToStr(time);   <<---- Se me situa el cursor (|Time)
end;

[Error] Principal.pas(136): Missing operator or semicolon

Me da igual como se haga, la idea es cambiar de formato hora a string o integer para poder operar con horas...

Gracias de todas maneras

BrunoBsso 24-03-2010 22:12:43

Es que te estás olvidando de poner el dato en la propiedad Caption del label.
Código Delphi [-]
Label1.Caption:=TimeToStr(Now);
Saludos!

gcc32 24-03-2010 22:17:25

Ya lo habia comprobado
 
Ya lo he comprobado, habia puesto el caption, esta todo correcto estoy desesperado...

marcoszorrilla 24-03-2010 22:17:53

¿Tienes declarada la variable S como String?

Un Saludo.

marcoszorrilla 24-03-2010 22:20:30

Pues la asignación directa te tiene que funcionar acabo de probarlo.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=TimeToStr(Now);
end;


Un Saludo.

marcoszorrilla 24-03-2010 22:23:14

He probado tu código y funciona perfectamente.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
hora2:Ttime;

begin
    hora2:=Time;
    s:=TimeToStr(time); //  <<---- Se me situa el cursor (|Time)
    ShowMessage(s);
end;

Un Saludo.

gcc32 24-03-2010 22:26:09

Gracias
 
Efectivamente, eso funciona pero en una aplicación nueva, no se porque de todas maneras, seguiré investigando, gracias.



¿Otra pregunta, como elimino los dos puntos de la hora para poder operar como si fuera un numero? Ej: 22:47:00 -> 224700


Muchisimas gracias

BrunoBsso 24-03-2010 22:33:43

Creo que existe un método para eso, pero yo no me lo acuerdo.
Podrías hacerlo vos mismo
Código Delphi [-]
function TimeToInt(T:TTime):Integer;
var
  S1,S2:String;
  I:Integer;
begin
  S1:=TimeToStr(T);
  S2:='';
  I:=1;
  while (I<=Length(S1)) do begin
    if (S1[i]<>':') then
      S2:=S2+S1[i];
    Inc(I);
  end;
  Result:=StrToInt(S2);
end;
Saludos.

BrunoBsso 24-03-2010 22:39:35

Haciendo un repaso:
Para cargar la hora actual en un TLabel lo único que necesitás es
Label1.Caption:=TimeToStr(Now)
No necesitás declarar ninguna variable extra (a menos que la necesites para almacenarlo).
La función Now devuelve solamente la hora actual, no devuelve fecha.

gcc32 24-03-2010 22:55:50

Muchas Gracias
 
Muchas Gracias, ya lo he conseguidoo!

rgstuamigo 24-03-2010 23:25:22

Cita:

Empezado por gcc32 (Mensaje 358178)
...
¿Otra pregunta, como elimino los dos puntos de la hora para poder operar como si fuera un numero? Ej: 22:47:00 -> 224700
...

Pues sencillamente puedes reemplazar los dos puntos(:) por vacio('') haciendo algo así:
Código Delphi [-]
Label1.Caption:=StringReplace(TimeToStr(Now),':','',[rfReplaceAll]);
ahora si lo quieres como número entero podría ser así:
Código Delphi [-]
entero:=StrToInt(Trim(StringReplace(TimeToStr(Now),':','',[rfReplaceAll])));
.
Aunque en éste ultimo he agregado la funcion Trim para eliminar los espacios en blanco ya sea por delante o al final, ya que tal parece se obtiene un error si no se lo hace,ya que al hacer la transformacion y reeplazo se obtiene un espacio en blanco al final. ;).
Espero te sea de utilidad.;).
Saludos...:)

BrunoBsso 24-03-2010 23:29:27

Eso que dijo rgstuamigo con StringReplace es justamente a lo que me refería yo con "Creo que existe un método para eso, pero yo no me lo acuerdo." :D

cmm07 25-03-2010 00:52:48

Cita:

Empezado por rgstuamigo (Mensaje 358191)
Pues sencillamente puedes reemplazar los dos puntos(:) por vacio('') haciendo algo así:
Código Delphi [-]Label1.Caption:=StringReplace(TimeToStr(Now),':','',[rfReplaceAll]);

ahora si lo quieres como número entero podría ser así:
Código Delphi [-]entero:=StrToInt(Trim(StringReplace(TimeToStr(Now),':','',[rfReplaceAll])));

.
Aunque en éste ultimo he agregado la funcion Trim para eliminar los espacios en blanco ya sea por delante o al final, ya que tal parece se obtiene un error si no se lo hace,ya que al hacer la transformacion y reeplazo se obtiene un espacio en blanco al final. ;).
Espero te sea de utilidad.;).
Saludos...:)


Hola ajjaja me adelantaste jaaja, :D, justo iba a responder eso mismo con el Stringreplace jajjaja.

saludos y q esten toodos OK!

gonza_619 18-11-2010 14:30:34

hola, bueno para guardar hora en un campo string, la hora de un dtpicker, podria ser algo como:

primero cambio el formato: dtpicker.format:=HH:mm

luego
var x:tdatetime
x:=dtpicker.time;
tablex.fieldbyname('hora'),asstring:=timetostr(x);

estaria en lo correcto?
otra pregunta, si quiero comparar la variable x para ver si es > o < a por ej:05:00
if x<05:00 then hace algo
me lo compara?

BrunoBsso 19-11-2010 07:25:39

Cita:

Empezado por gonza_619 (Mensaje 382650)
hola, bueno para guardar hora en un campo string, la hora de un dtpicker, podria ser algo como:

primero cambio el formato: dtpicker.format:=HH:mm

luego
var x:tdatetime
x:=dtpicker.time;
tablex.fieldbyname('hora'),asstring:=timetostr(x);

estaria en lo correcto?
otra pregunta, si quiero comparar la variable x para ver si es > o < a por ej:05:00
if x<05:00 then hace algo
me lo compara?

Para guardar la hora en un string y mandarla a la BD:
Código Delphi [-]
var
  S: String;
begin
  S := FormatDateTime('HH:mm',dtpicker.Time);
  tablex.fieldbyname('hora'),asstring := S;
  //Mas simple: tablex.fieldbyname('hora'),asstring :=  FormatDateTime('HH:mm',dtpicker.Time);
end;

Para comparar:
Código Delphi [-]
var
  X, Comparacion: TTime;
begin
  X := Now;
  Comparacion := StrToTime('05:00:00');
  if (X < Comparacion) then //Si X es menor a 05:00:00
    ShowMessage(TimeToStr(X) + ' es menor a ' + TimeToStr(Comparacion))
  else if (X > Comparacion) then //O mayor
         ShowMessage(TimeToStr(X) + ' es mayor a ' + TimeToStr(Comparacion))
       else
         ShowMessage('Son iguales');
end;

ecfisa 19-11-2010 07:29:34

Hola gonza_619.

Sobre tu primer consulta, yo lo haría en forma directa:
Código Delphi [-]
   TableX.FieldByName('HORA').AsString:= TimeToStr(DateTimePicker1.Time);

Sobre la segunda no te lo compara. Y hace algo: te dá error. No podés comparar 05:00, que supongo que es de tipo string, con una variable de tipo TDateTime.
Para compararla sería:
Código Delphi [-]
uses DateUtils;
var
  x: TDateTime;
begin
  x:= Now;
  if TimeOf(x) > StrToTime('05:00') then
  ...

Recordá que tenes mayor posibilidad de hallar respuestas si inicias un nuevo hilo con tu duda.
Además, facilitas a otros compañeros con el mismo problema a encontrar más rápidamente una solución.


Saludos. :)

gonza_619 19-11-2010 20:31:30

bueno gracias ya me salio, pero una consulta mas, si utilizo un datetime picker, necesitaria que simpre me guarde los segundo en 00 ya que aparecen con 53 en mi caso, lo q hize fue cambiarle en 00 donde aparaece en la propiedad del dtpicker, con eso seria sificiente? o despues se vuelve a cambiar solo? grax

ecfisa 19-11-2010 22:23:08

Hola.

Podrías hacer así:
Código Delphi [-]
uses DateUtils;
var
  aa,mm,dd,h,m,s,ms: Word;
begin
  DecodeDateTime(DateTimePicker1.DateTime, aa, mm, dd, h, m, s, ms);
  TableX.FieldByName('HORA').AsString:= IntToStr(h);
end;
De ese modo podés guardar lo que quieras del TDateTimePicker, desde el año hasta los milisegundos.

Saludos. :)


La franja horaria es GMT +2. Ahora son las 09:59:24.

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