Ir al contenido


Foto

[RESUELTO] Como validar el formato de fecha de correos POP3


  • Por favor identifícate para responder
7 respuestas en este tema

#1 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 28 febrero 2011 - 05:10

Hola


Estoy desarrollando un cliente de correo y se me presentó un detalle, el formato de la fecha del mensaje cambia dependiendo de la configuración del que envió el correo, es decir, a veces llega como dd/mm/yyy y otras mm/dd/yyyy y obviamente me muestra un horroroso error de casting.


Salud OS
  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 01 marzo 2011 - 02:19

Pero ... tendrá que haber algún sitio donde te diga en que formato viene la fecha, porque de lo contrario sería imposible diferenciar entre el 1 de febrero y el 2 de enero.
  • 0

#3 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 01 marzo 2011 - 05:59

Si usas las Indy, por la conexion POP3 recives varios TIdMessage, que tienen una propiedad Date, que según la documentacion:

Date is a TDateTime property that represents the TDateTime, expressed in the local timezone, when the message was sent. For an incoming message, Date contains the value read from the message header "Date:". For an outgoing messsage, Date contains the value written to the message header "Date:", or the current timestamp when UseNowForDate is True.

Vamos, que de esos detalles ya se encarga el objeto que recibe el mensaje (al menos si usas las Indy).

A nivel mas "crudo", supongo que en las cabeceras del mensaje tendras el estandar que sigue en cada cada, y seguramente un estandar envia la fecha en formato "americano" y otro en "europeo", por llamarles de alguna forma, pero desconozco esos detalles (yo uso el sistema sencillo, las Indy).
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 01 marzo 2011 - 08:39

Hola, gracias seoane y Sergio, de hecho utilizo la función Date de TIdMessage y haciendo una segunda revisión me parece que el problema está en otro lado, lo estoy revisando y ya les comento el resultado.

Salud OS
  • 0

#5 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 02 marzo 2011 - 07:19

Yo he tenido problemas similares al pasarle una fecha a excel: si puede (dia menor de 13), te cambia dia por mes a la americana, y si no puede, pues te lo interpreta a la europea.

Al final creo un formato de fecha especifico (sin usar el del windows), lo fijo al estilo americano, y formateo la fecha con ese formato -el FormatDatetime y similares, como el propio format, se le puede pasar una variable de formatos locales.

Por si te sirve:

Declaracion:


delphi
  1.     AmericanFormat: TFormatSettings;



Ajuste incial:


delphi
  1.   GetLocaleFormatSettings( 0, AmericanFormat);
  2.   AmericanFormat.ThousandSeparator:= ',';
  3.   AmericanFormat.DecimalSeparator:=  '.';
  4.   AmericanFormat.ShortDateFormat:=  'mm/dd/yyyy';



Uso en fechas:


delphi
  1.   FormatDateTime('ddddd', v, AmericanFormat);



Uso en numeros:


delphi
  1.   Format('%f', [MiDouble], AmericanFormat);


  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 02 marzo 2011 - 10:23

Hola Sergio, muchas gracias por el comentario ya alguna vez leí acerca de lo que mencionas y me parece muy interesante.

Bueno, después de una revisión a mis procesos me di cuenta que estaba trabajando un campo de tipo TDateTime como string y luego lo regresaba a TDateTime ( cuestión absurda como comprenderan :D ), pues nada, lo que hice fué trabajar directamente con el TDateTime, hasta ahora no he visto que haya problema, sin embargo, le he pasado el proyecto al "tester" para que verifique y en su caso libere los procesos.

Salud OS
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 05 marzo 2011 - 04:16

Hola

Actualizando este hilo, pues resulta que no era asunto del POP3, el problema saltaba en el momento de insertar datos en una tabla creando el query "on the fly", lo cambié utilizando parámetros y asunto resuelto.

Es una lata no poder compilar las aplicaciones en aquellas máquinas donde saltan los problemas, en mi maquina, con ambiente controlado nunca fallan  :D :D :D

Muchas gracias pos sus aportaciones, se aprenden cosas nuevas y eso es lo importante, aunque el error no tenia que ver con el titulo inicial :)

Salud OS

  • 0

#8 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 07 marzo 2011 - 05:11

Es una lata tener que usar parametros cada vez que necesitas pasarle una fecha a una SQL, nosotros usamos (en FireBird, ojo, no conozco otros casos ni se si esto es "ISO" o que) con esta funcioncita que trasforma una fecha en un texto usable en una SQL:



delphi
  1. function Fecha2SQL( Fecha: TDateTime ): String;
  2. var Dia, Mes, Anno: Word;
  3. begin
  4.   try
  5.     DecodeDate(Fecha, Anno, Mes, Dia );
  6.     result:= ''''+IntToStr(Dia)+'.'+IntToStr(Mes)+'.'+IntToSTr(Anno)+'''';
  7.   except
  8.     result:= '';
  9.   end;
  10. end;



Luego usarla es muy sencillo, bastante mas que los parametros, prepares, setparam:



delphi
  1. MyQuery.SQL.Text:= 'update MyTabla set FechaCierre='+Fecha2SQL(now)+' where FechaAlta>'+Fecha2SQL(now-30);



  • 0




IP.Board spam blocked by CleanTalk.