Успех преобразования из string
в TDateTime
с использованием VarToDateTime
зависит от настроек локали в системе пользователей. Преобразование не выполняется, если эти параметры не соответствуют строке. Это причина, по которой преобразование завершается с ошибкой в моей системе, а также на вашем.
Основной параметр, если вы работаете с Delphi XE6 или новее, заключается в использовании функции ISO8601ToDate()
, как предложено Marc Guillot в другом ответе
Если вы работаете с Delphi 2010 или более поздней версией, вы можете использовать представленное здесь решение.
Более ранние версии, чем дроссель Delphi 2010 на «T» во входной строке и может преуспеть, если «T» удаляется или заменяется пробелом.
Используйте функцию преобразования, которая принимает параметр TFormatSetting
, который можно отрегулировать в соответствии со строкой для преобразования. Эта функция представляет собой следующую перегрузку StrToDateTime()
(см. документ Embarcadero )
function StrToDateTime(const S: string; const AFormatSettings: TFormatSettings): TDateTime;
Установка AFormatSettings
в соответствии с строкой для преобразования гарантирует, что преобразование будет успешным:
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;