PDA

Ver la Versión Completa : Fecha a partir de un string


johurgi
18-12-2007, 12:19:09
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".

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

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:

//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.