Lorsque je convertis le type string
en TDateTime
j'obtiens une erreur. J'utilise la fonction VarToDateTime
. Ma date sous forme de chaîne est 2018-07-11T13:45:14.363
.
var
s: string;
v: Variant;
dt: TDateTime;
begin
s := '2018-07-11T13:45:14.363';
v := s;
dt := VarToDateTime(v);
end;
Le succès d'une conversion de string
vers TDateTime
à l'aide de VarToDateTime
dépend des paramètres régionaux dans le système des utilisateurs. La conversion échoue si ces paramètres ne correspondent pas à la chaîne. C'est la raison pour laquelle la conversion échoue sur mon système, ainsi que sur le vôtre.
L'option principale , si vous travaillez avec Delphi XE6 ou version ultérieure, consiste à utiliser la fonction ISO8601ToDate()
comme suggéré par Marc Guillot dans une autre réponse
Si vous travaillez avec Delphi 2010 ou une version ultérieure, vous pouvez utiliser la solution présentée ici.
Les versions antérieures à Delphi 2010 s'étouffent avec le "T" dans la chaîne d'entrée et peuvent réussir si le "T" est supprimé ou remplacé par un espace.
Utilisez une fonction de conversion qui accepte un TFormatSetting
qui peut être ajusté en fonction de la chaîne à convertir. Une telle fonction est la surcharge suivante de StrToDateTime()
(Voir document Embarcadero )
function StrToDateTime(const S: string; const AFormatSettings: TFormatSettings): TDateTime;
La définition de AFormatSettings
pour faire correspondre la chaîne à convertir garantit la réussite de la conversion:
procedure TForm3.Button1Click(Sender: TObject);
var
fs: TFormatSettings;
s: string;
dt: TDateTime;
begin
fs := TFormatSettings.Create;
fs.DateSeparator := '-';
fs.ShortDateFormat := 'yyyy-MM-dd';
fs.TimeSeparator := ':';
fs.ShortTimeFormat := 'hh:mm';
fs.LongTimeFormat := 'hh:mm:ss';
s := '2018-07-11T13:45:14.363';
dt := StrToDateTime(s, fs);
end;
Il semble s'agir de chaînes de date/heure ISO8601: https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations
Ainsi, sur Delphi XE 6 et versions ultérieures, vous pouvez utiliser la fonction de conversion correspondante: ISO8601ToDate
http://docwiki.embarcadero.com/Libraries/XE8/en/System.DateUtils.ISO8601ToDate
Mais si vous utilisez une ancienne version de Delphi, vous pouvez utiliser la fonction XMLTimeToDateTime sur l'unité XSBuiltIns pour effectuer cette conversion (disponible depuis Delphi 6).
http://docwiki.embarcadero.com/Libraries/Tokyo/en/Soap.XSBuiltIns.XMLTimeToDateTime