'23/02/2011 12:34:56 'недействительна дата и время

В моем коде я столкнулся с проблемой. Пример кода:

var 
    d1: tdatetime
begin
    d1 := strtodatetime('23/02/2011 12:34:56');
end; 

но он дает ошибку:

'23/02/2011 12:34:56 'недействителен дата и время

Что случилось с тем, что я делаю?

Ответы

Ответ 1

функция StrToDateTime использует ShortDateFormat и DateSeparator, чтобы преобразовать часть даты и LongTimeFormat и TimeSeparator к временной части. поэтому строка должна соответствовать переменным theses для преобразования строки в TDateTime. вместо этого вы можете использовать StrToDateTime с параметром TFormatSettings для синтаксического анализа строки.

 function StrToDateTime(const S: string; const FormatSettings: TFormatSettings): TDateTime; 

проверьте этот образец

Var
StrDate : string;
Fmt     : TFormatSettings;
dt      : TDateTime;
begin
fmt.ShortDateFormat:='dd/mm/yyyy';
fmt.DateSeparator  :='/';
fmt.LongTimeFormat :='hh:nn:ss';
fmt.TimeSeparator  :=':';
StrDate:='23/02/2011 12:34:56';
dt:=StrToDateTime(StrDate,Fmt);

Ответ 2

Использование VarToDateTime может быть намного проще, и он просто работает из коробки:

uses Variants;

newDateTime := VarToDateTime('23/02/2011 12:34:56');

Ответ 3

Это связано с тем, что формат даты/времени в вашем коде не соответствует формату даты/времени для ваших настроек локали.

В документах (D2009):

Параметр S должен использовать текущий языковой формат даты/времени. В США, это обычно MM/DD/YY HH: MM: SS формат. Задание AM или PM как части время является необязательным, как и секунд. Используйте 24-часовое время (7:45 PM например, в 19:45), если AM или PM не указывается.

Если вы используете старый Delphi, StrToDateTime может потребоваться определенный формат. Из документов (D5 в этом случае):

Параметр S должен находиться в MM/DD/YY ЧЧ: MM: формат SS. Определение AM или PM как часть времени дополнительно, как и секунды. использование 24-часовое время (7:45 PM вводится как 19:45, например), если AM или PM не указано.