Ver Mensaje Individual
  #6  
Antiguo 04-03-2012
Leviatan Leviatan is offline
Miembro
 
Registrado: oct 2005
Posts: 56
Reputación: 19
Leviatan Va por buen camino
Gracias ecfisa.

Lo resolví de una manera similar a lo que me estás comentando:

Código Delphi [-]
function FormatearFechaHora(Cadena: string): string;
var
  Anio, Mes, Dia, Hora, Min, Seg, sFecha: string;
  FechaHora: TDateTime;
  iDia, iMes, iAnio: Integer;
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);

  // Deducir el formato de la fecha
  iDia := Pos('d', SysUtils.ShortDateFormat);
  if iDia = 0 then
    iDia := Pos('D', SysUtils.ShortDateFormat);

  iMes := Pos('m', SysUtils.ShortDateFormat);
  if iMes = 0 then
    iMes := Pos('M', SysUtils.ShortDateFormat);

  iAnio := Pos('y', SysUtils.ShortDateFormat);
  if iAnio = 0 then
    iAnio := Pos('Y', SysUtils.ShortDateFormat);

  if (iDia < iMes) and (iDia < iAnio) and (iMes < iAnio) then
  begin
    if Pos('/', SysUtils.ShortDateFormat) > 0 then
      sFecha := Dia + '/' + Mes + '/' + Anio + ' ' + Hora + ':' + Min + ':' + Seg
    else
    if Pos('-', SysUtils.ShortDateFormat) > 0 then
      sFecha := Dia + '-' + Mes + '-' + Anio + ' ' + Hora + ':' + Min + ':' + Seg
  end
  else
  if (iMes < iDia) and (iMes < iAnio) and (iDia < iAnio) then
  begin
    if Pos('/', SysUtils.ShortDateFormat) > 0 then
      sFecha := Mes + '/' + Dia + '/' + Anio + ' ' + Hora + ':' + Min + ':' + Seg
    else
    if Pos('-', SysUtils.ShortDateFormat) > 0 then
      sFecha := Mes + '-' + Dia + '-' + Anio + ' ' + Hora + ':' + Min + ':' + Seg
  end
  else
  if (iAnio < iDia) and (iAnio < iMes) and (iMes < iDia) then
  begin
    if Pos('/', SysUtils.ShortDateFormat) > 0 then
      sFecha := Anio + '/' + Mes + '/' + Dia + ' ' + Hora + ':' + Min + ':' + Seg
    else
    if Pos('-', SysUtils.ShortDateFormat) > 0 then
      sFecha := Anio + '-' + Mes + '-' + Dia + ' ' + Hora + ':' + Min + ':' + Seg;
  end;

  FechaHora := StrToDateTime(sFecha);

  Result := AnsiReplaceStr(FormatDateTime('yyyy-mm-dd hh:mm:ss', FechaHora), ' ', 'T');
end;

Inclusive tengo que decirle a la aplicación si los separadores serán barras o guiones, porque aún en esto me daba error de formato.

Gracias y saludos.

Última edición por Leviatan fecha: 04-03-2012 a las 17:44:20.
Responder Con Cita