Para el ejemplo de formato que presentas prueba esto otro:
'2009-01-08T20:40:49.523-02:00'
Código Delphi
[-]procedure TForm1.Button1Click(Sender: TObject);
Var
dFecha:TDate;
begin
TextoAFechayHora(Edit1.Text);
end;
function TextoAFechayHora(S:String):TDateTime;
var
aa,mm,dd,hh,mn,ss,ms:Word;
begin
Try
aa:=StrToInt(copy(s,1,4));
mm:=StrToInt(Copy(s,6,2));
dd:=StrToInt(Copy(s,9,2));
hh:=StrToInt(Copy(s,12,2));
mn:=StrToInt(Copy(s,15,2));
ss:=StrToInt(Copy(s,18,2));
ms:=00;
Result:=EncodeDateTime(aa,mm,dd,hh,mn,ss,ms);
Except
ShowMessage('formato de datos erroneo');
end
end;
Un Saludo.