Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar el formato de fecha (https://www.clubdelphi.com/foros/showthread.php?t=7424)

VolaRe 15-02-2004 20:30:12

Cambiar el formato de fecha
 
Alguien sabe si existe una funcion que cambie el formato de fecha, paritendo de este valor 'dom, 10 - ene - 2004', pasarlo a este otro '10/1/2004'. O sea para qeu nos entendamos que teniendo esta cadena 'dom, 10 - ene - 2004' lo pueda convertir en un TDateTime.

Lo eh provado con StrDate('dom, 10 - ene - 2004'), pero me indica qeu no es valida el formato fecha y con StrToDateTime y me dice lo mismo. Alguien me puede proporcionar alguna idea, como siempre gracias por adelantado :)

santana 15-02-2004 23:27:27

Prueba a cambiar el formato manualmente en el evento OnSetText

Saludos

VictorVG 19-02-2004 21:01:56

Hola!!

No existe ninguna función definida por Borland que haga lo que tu necesitas salvo la que has probado, pero claro, esta se ciñe al formato de fecha/hora establecido por el sistema y te da una excepción.
Yo creo que deberías almacenar la fecha con un formato TDateTime y cuando necesites mostrarla le das el formato "Jue, 19 - 2 - 2004" con FormatDateTime, pero nunca almacenes como texto una fecha o por lo menos con ese formato, una cosa es como guardas los datos y otra como los muestras.

Pero por si es necesario u obligado que la fecha te llegue en ese formato a la hora de trabajar con ella, puedes optar por usar este código de C:

double ExtraerFecha(char *stringFecha) {
Word dia, mes, anyo;

sscanf(stringFecha, "%*s %hu - %hu - %hu", 0, &dia, &mes, &anyo);
return EncodeDate(anyo, mes, dia).Val;
}

El inconveniente es que la tienes que exportar a Delphi creando una DLL, un OBJ o un LIB.

Otra opción es que implementes una rutina en Delphi que quite hasta el primer espacio, y luego vaya quedándose con lo que sean números y separándolo en variables, vamos, lo que hace 'sscanf' pero solo para tu caso, sin tener que pasarle cadena de formato.

Otra opción es que le eches un vistazo a las variables globales “DateSeparator”, “LongDateFormat” y “ShortDateFormat”; escribe una de estas en el editor de Delphi en cualquier sitio y pulsa ‘F1’ verás que cantidad de información.

Aunque lo mejor es que me hagas caso a lo que te he puesto al principio, guarda siempre el dato en TDateTime y muéstralo como te venga en gana.


Suerte :-)

VolaRe 19-02-2004 21:15:15

Gracias
 
Gracias por tu consejo, lo tendre muy encuenta para la proximavez que trabaje con fechas :)

roman 19-02-2004 21:46:16

Prueba esta función:

Código:

function StringToDate(S: String): TDate;
var
  Coma: Integer;

begin
  Coma := Pos(',', S);
  if Coma = 0 then
    raise Exception.Create('Formato inválido');

  Delete(S, 1, Coma);
  ActiveX.VarDateFromStr(S, 0, 0, Double(Result));
end;

Deberás incluir la unidad ActiveX en tu proyecto.

// Saludos


La franja horaria es GMT +2. Ahora son las 00:48:04.

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