Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-05-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Exclamation Convertir de un formato de fecha en string a TDateTime

Hola amigos. Tengo un problemita que me hace falta solucionar para poder continuar con una aplicacion que estoy haciendo. El problema es que en un fichero una de las lineas contiene la fecha, pero en este formato.

Wed, Jul 22, 2009 at 1:05 AM

Entonces tengo que leer esa linea y de ella obtener el TDateTime correspondiente. Creo que son StrToDateTime se puede hacer. Pero por mas que lo intento no lo logro. Alguien me puede ayudar o darme una idea de como hacer esto?.

Gracias desde ya !
Responder Con Cita
  #2  
Antiguo 06-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
podrias colocar algo del codigo que estas usando? para tener una idea de como lo estas haciendo?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 06-05-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Si claro. Disculpenme por no poner algo de codigo. Aca les dejo la funcion que hice que lo que hace es cojer un archivo de texto con la siguiente extructura y devolver un idMessage con los datos ya incluidos.

Aca los datos del fichero que tengo que leer.
Código:
usuario <usuario@domio.com> //De
usuario <usuario@domio.com> //Para
prueba //Asunto
Wed, Jul 22, 2009 at 1:05 AM //Fecha (Aca es donde no consigo convertir a TDateTime)

Esto es un ejemplo de lo que seria el contenido
del correo en el mensaje enviado.
Aca la funcion.

Código Delphi [-]
procedure TForm1.GetMessageFromTXT(pFileName: string; var pIdMessage: TIdMessage);
var
  vStringList: TStringList;
  vDateTime: TDateTime;
begin

  vStringList := TStringList.Create;

  //Formateando la Fecha/Hora

  {The following example:

      S := FormatDateTime('"The meeting is on" dddd, mmmm d, yyyy, ' +
        '"at" hh:mm AM/PM', StrToDateTime('2/15/95 10:30am'));

    assigns 'The meeting is on Wednesday, February 15, 1995 at 10:30 AM' to
    the string variable S. }

  LongDateFormat := 'ddd, mmm d, yyyy "at" hh:mm AM/PM';
  ShortDateFormat := 'ddd, mmm d, yyyy "at" hh:mm AM/PM';

  try
    vStringList.LoadFromFile(pFileName);

    pIdMessage.From.Text := vStringList.Strings[0];
    pIdMessage.Recipients.Add.Text :=  vStringList.Strings[1];
    pIdMessage.Subject := vStringList.Strings[2];

    //Fecha/Hora
    {if TryStrToDateTime(vStringList.Strings[3], vDateTime, vFormatSettings) then
      pIdMessage.Date := vDateTime
    else
      ShowMessage('Explote aqui: ' + vStringList.Strings[3]);}

    vDateTime := StrToDateTime(vStringList.Strings[3]);

    pIdMessage.Date := vDateTime;    

    vStringList.Delete(0);
    vStringList.Delete(0);
    vStringList.Delete(0);
    vStringList.Delete(0);
    vStringList.Delete(0);

    pIdMessage.Body.Text := vStringList.Text;

  finally
    vStringList.Free;
  end;

end;
Responder Con Cita
  #4  
Antiguo 06-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
q resultado obtienes?

sabes? se me ocurre que en lugar de hacerlo con una funcion podrias "armarte" tu mismo una cadena

eliminando los 4 primeros caracteres y jalando los 3 siguientes tienes el mes
dejas un espacio y continuas hasta la siguiente coma (,) y tienes el dia 5 caracteres mas y tienes el anio....
y ahi podrias usar un decodedate para armar la fecha....
siempre y cuando se tenga el mismo formato obvio

no se.. es una idea...
__________________
Dulce Regalo que Satanas manda para mi.....

Última edición por oscarac fecha: 06-05-2011 a las 07:11:53. Razón: me falto incluir el tema del formato
Responder Con Cita
  #5  
Antiguo 06-05-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Bueno, la idea que me expones ya l tenia en mente por que hace algun tiempo la vi, ademas en la ayuda de Delphi he visto como utilizan en Decode\Encode para las fechas y horas y no estaria mal implementarlo de la manera que dices. Lo que sucede que yo creia que esto se podia hacer de la forma en que yo lo he estado intentando. Pero me parece que el unico formato de entrada que aceptan las funciones de fecha/hora son los clasicos como MM\DD\YYYY HH:MM:SS AM/PM. Bueno pues voy a implementarlo asi como me dices cuando termine te comento que tal me va.
Responder Con Cita
  #6  
Antiguo 06-05-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Bueno aqui esta la funcion que he utilizado ya para convertir la dichosa linea con la fecha y hora en el formato dado a algo que delphi entienda. Aqui les dejo el codigo.

Ha, por cierto la clase que utilizo ahi es una que me permite sacar los tokens, o parametros separados por coma o espacio del string. Si hace falta me dicen y publico la Unit con la definicion de la clase.

Aca el codigo.

Código Delphi [-]
procedure TForm1.GetMessageFromTXT(pFileName: string; var pIdMessage: TIdMessage);
var
  vStringList: TStringList;
  vDateTime: TDateTime;
  vCToken: TToken;
  vNum, vX: Byte;
  vStrDateTime, vStrUtil: string;
begin

  vStringList := TStringList.Create;
  vCToken := TToken.Create;

  try
    vStringList.LoadFromFile(pFileName);

    pIdMessage.From.Text := vStringList.Strings[0];
    pIdMessage.Recipients.Add.Text :=  vStringList.Strings[1];
    pIdMessage.Subject := vStringList.Strings[2];


    vCToken.Text := vStringList.Strings[3];
    vCToken.Seps := [',',' ']; //Separadores utilizados
    vCToken.Count;

    vCToken.First;
    vNum := 0;
    while vCToken.MoreTokens do
    begin
      Inc(vNum);
      //1: Dia del mes, que no es necesario
      //2: Mes (que tenemos que sacar su indice del array de meses)
      //3: #dia (ej. 22)
      //4: Año
      //5: "at"
      //6: La Hora
      //7: AM o PM
      vStrUtil := StringReplace(vCToken.LastToken, ' ', '', [rfReplaceAll]);

      case vNum of
        2: begin
            (*Aca tenemos que saber en que mes estamos para extraerlo
             OJO: Esto va a fallar cuando el SO este en español o sea
             el arreglo de meses no contenga los meses en ingles. *)

            //**** Recorremos todos los meses
            for vX := 1 to 12 do
              begin
                //Sacamos el numero del mes dado
                if LowerCase(ShortMonthNames[vX]) = LowerCase(vStrUtil) then
                  begin
                    vStrDateTime := IntToStr(vX);
                    break;
                  end;   
              end;
           end;
        3: begin
            vStrDateTime := vStrDateTime + '/' + vStrUtil;
           end;
        4: begin
            vStrDateTime := vStrDateTime + '/' + vStrUtil;
           end;
        6: begin
            vStrDateTime := vStrDateTime + ' ' + vStrUtil;
           end;
        7: begin
            vStrDateTime := vStrDateTime + ' ' + vStrUtil;
           end;
      end;

      vCToken.Next;
    end;

    vDateTime := StrToDateTime(vStrDateTime);

    pIdMessage.Date := vDateTime;    

    vStringList.Delete(0);
    vStringList.Delete(0);
    vStringList.Delete(0);
    vStringList.Delete(0);
    vStringList.Delete(0);

    pIdMessage.Body.Text := vStringList.Text;

  finally
    vStringList.Free;
    vCToken.Free;
  end;

end;

Última edición por fide_uci fecha: 06-05-2011 a las 17:22:45. Razón: Corrigiendo algunos problemitas que se me quedaron.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Convertir una formato de fecha en consulta sql ingabraham Varios 2 03-09-2010 22:25:59
Convertir String a Fecha Gaim2205 SQL 7 04-12-2008 04:14:10
problemas, convertir fecha desde un string spyfenix OOP 9 20-12-2007 20:25:05
Convertir fecha con formato sql a algo legible Delphitest Varios 9 29-05-2007 05:06:20
Convertir un SQLDate a TDateTime hector.roma SQL 4 14-07-2005 13:59:14


La franja horaria es GMT +2. Ahora son las 04:38:15.


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