Ver Mensaje Individual
  #4  
Antiguo 04-03-2012
Leviatan Leviatan is offline
Miembro
 
Registrado: oct 2005
Posts: 56
Reputación: 20
Leviatan Va por buen camino
En primer lugar gracias por sus comentarios.

A ver si me explico.

Estoy desarrollando una aplicación que, entre otras cosas, lee datos separados por "pipes" en un socket TCP. Entre esos datos me viene la fecha y la hora en esta forma: ...|...|20120117074642|...|... (sería añomesdiahoraminutosegundo).

Lo primero que hago es descomponer la fecha/hora en sus partes, o sea:

Código Delphi [-]
function FormatearFechaHora(Cadena: string): string;
var
  Anio, Mes, Dia, Hora, Min, Seg: string;
  FechaHora: TDateTime;
  ...
begin
  Anio := Copy(Cadena, 1, 4);
  Mes := Copy(Cadena, 5, 2);
  Dia := Copy(Cadena, 7, 2);
  Hora := Copy(Cadena, 9, 2);
  Min := Copy(Cadena, 11, 2);
  Seg := Copy(Cadena, 13, 2);
  ...
  ...
  // Lo convierto a formato FechaHora
  FechaHora := StrToDateTime(Dia + '/' + Mes + '/' + Anio + ' ' + Hora + ':' + Min + ':' + Seg);
  ...
  ...
  // Luego devuelvo el valor en otro formato
  Result := AnsiReplaceStr(FormatDateTime('yyyy-mm-dd hh:mm:ss', FechaHora), ' ', 'T');
end;

Ahora, el meollo de la cuestión está en esta sentencia:

Código Delphi [-]
begin
  ...
  FechaHora := StrtoDateTime(Dia + '/' + Mes + '/' + Anio + ' ' + Hora + ':' + Min + ':' + Seg);"
  ...
end;
Para un equipo en el que está configurado el formato "dd/mm/yyyy" funciona de maravilla, pero cuando ejecuto la aplicación en un equipo con formato "mm/dd/yyyy", me dice que la fecha "17/01/2012 07:46:42" no es una fecha/hora válida, claro, no existe el mes "17". Luego probé colocando primero el mes y luego el día obteniendo el efecto contrario, es decir, funciona con el formato "mm/dd/yyyy" pero error en formato "dd/mm/yyyy".

La idea es que la aplicación se ajuste al formato de fecha establecido en la Configuración regional y no al revés.

Entonces, la única alternativa que se me ocurrió es poder "leer" todos los formatos de fecha que el SO me permite elegir y comparar con lo que está realmente establecido.

En mi mensaje anterior les decía por ejemplo que dos de los formatos eran "dd/MM/yyyy" y "dd/MM/yy", los cuales obviamente para Delphi son diferentes. Por eso es que preguntaba si se podía devolver "esos cinco formatos" que es mi caso, compararlos con lo que se definió efectivamente en la Configuración regional y en base a eso decirle a la aplicación que la fecha será "Dia + '/' + Mes + '/' + Anio" o "Mes + '/' + Dia + '/' + Anio" o algún otro.

Quizás ustedes tengan alguna alternativa mejor a lo que yo estoy planteando.

Bueno, espero ahora sí haber sido claro.

Saludos.

Última edición por Leviatan fecha: 04-03-2012 a las 06:12:13.
Responder Con Cita