Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Fecha a partir de un string (https://www.clubdelphi.com/foros/showthread.php?t=51519)

johurgi 18-12-2007 12:19:09

Fecha a partir de un string
 
Hola a todos,

Mi duda es la siguiente:

Tengo un string de la siguiente forma "1812078" que significa el dia de hoy.
De que forma podria yo inicializar una variable de tipo fecha para poderla comparar por ejemplo con otra fecha "011207".
Código:

var
  inicial:string;
  final:string;
begin
  inicial:='011207';
  final:='181207';
//convertir strings a fechas
//compararlos
end;

gracias de antemano

white_zombie 18-12-2007 12:37:57

Hola con las funciones leftstr, rightstr y midstr puedes sacar de ese string dia, mes y año. Con esto ya tendría un formato de fecha para utilizarlo para compararlo o para mostrarlo.

La ayuda de delphi explica muy bien como usar esas funciones.

Un saludo.

rafita 18-12-2007 12:43:38

veamos
Código:

var Inicio, Fin : String;
    FInicio, FFin : TDateTime;

begin
  Inicio:='010107';
  Fin:='181207';

  // pasar a TDateTime
  FInicio:=Encode( StrToInt('20'+Copy(Inicio,5,2)), StrToIntCopy(Inicio, 3, 2)), StrToInt(Copy(Inicio, 1, 2)) );
  FFin:=Encode( StrToInt('20'+Copy(Fin,5,2)), StrToIntCopy(Fin, 3, 2)), StrToInt(Copy(Fin, 1, 2)) );

  // Comparar
  if FInicio > FFin then .....


Resumiendo, utiliza la función "Encode" pasándole el año, mes y día, y te devuelve una fecha.
Le sumo '20' porque considero que las fechas son de este siglo, pero para evitar problemas te recomiendo que guardes el año con 4 dígitos.

Para comparar las fechas lo puedes hacer directamente ( if FInicio < FFin) pero teniendo en cuenta que no tengan nada en la parte de la hora. Montándolas como yo lo he hecho no tienen nada, pero si las capturas desde el sistema ( FInicio:=NOW) si puede tener contenido y resultar que dos variables con el mismo día son diferentes porque tienen horas distintas.

También puedes utilizar funciones como DaysBetween...


Nota: el código anterior lo he hecho aquí por tanto puede contener errores. Lo importante es la idea
Saludos,

Gabo 18-12-2007 12:48:32

Lo de inicializar la variable, ya te lo he respondido rafa... tienes los tipos de datos TDate y TDateTime.

Para convertir el string en fecha, tienes Encode (ya comentado) y StrToDate. En ese último caso, el string tiene que cumplir unas determinadas características que encontrarás en la ayuda.

johurgi 18-12-2007 13:03:48

Gracias por vuestras respuestas, ya lo resolvi de la siguiente forma:
Código:

//ANTERIORMENTE YA FORMATEO LA FECHA PARA MONTAR EL STRING DE //LA FORMA QUE VEIS EN EL CODIGO.
procedure fechas(ini,fin:string);
var
  lafecha:Tdatetime;
  diaini:Tdatetime;
  diafin:Tdatetime;
begin
diaini:=strtodate(ini);{01/12/07}
diafin:=strtodate(fin);{18/12/07}
if CompareDate(diaini,diafin)=1 then lafecha:=diaini;
else lafecha:=diafin;
result:=lafecha;
end;

Espero que le sirva a alguien.

un saludo.


La franja horaria es GMT +2. Ahora son las 04:18:58.

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