'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 не указано.