Hola roman; gracias por responder.
Lo que pasa es que yo en realidad no mostré todo el código de la función. Aparte de convertir al formato que devuelve la función, antes de eso tengo que hacer una operación con la fecha: sumar o restar horas según la zona horaria del equipo (-UTC o +UTC) en el cual esté instalada la app. Por eso solo mostré la parte que a mí me interesaba la cual era
poder determinar el formato de la fecha.
Este es el código definitivo:
Código Delphi
[-]function FormatearFechaHora(Cadena: string): string;
var
Anio, Mes, Dia, Hora, Min, Seg, sFecha: string;
Info: TIME_ZONE_INFORMATION;
FechaHora, Bias: 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);
GetTimeZoneInformation(Info);
Bias:= abs(Info.Bias + Info.DaylightBias) / 1440;
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);
if Info.Bias + Info.DaylightBias < 0 then
FechaHora := FechaHora - StrToTime(TimeToStr(Bias))
else
FechaHora := FechaHora + StrToTime(TimeToStr(Bias));
Result := AnsiReplaceStr(FormatDateTime('yyyy-mm-dd hh:mm:ss', FechaHora), ' ', 'T');
end;
Fue también responsabilidad mía no incluir todo el código a fin de evitar confusiones.
Un abrazo.