В моем коде я сталкиваюсь с проблемой. Пример кода:
var
d1: tdatetime
begin
d1 := strtodatetime('23/02/2011 12:34:56');
end;
но это дает ошибку:
'23.02.2011 12:34:56' не является допустимой датой и временем
Что случилось с тем, что я делаю?
функция StrToDateTime использует ShortDateFormat
и DateSeparator
для преобразования части даты и LongTimeFormat
и TimeSeparator
] к временной части. поэтому строка должна соответствовать этим переменным, чтобы преобразовать строку в 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);
Это вызвано тем, что формат даты / времени в вашем коде не соответствует формату даты / времени для ваших языковых настроек.
Из документации (D2009):
Параметр S должен использовать текущий формат даты / времени локали. В США, обычно это ММ / ДД / ГГ ЧЧ: ММ: СС формат. Указание AM или PM как части время не является обязательным, как и секунд. Используйте 24-часовое время (19:45 - это вводится как 19:45, например), если AM или PM не указан.
Если вы используете более старую версию Delphi, для StrToDateTime может потребоваться определенный формат. Из документации (в данном случае D5):
Параметр S должен быть в ММ / ДД / ГГ ЧЧ: ММ: СС формат. Указание AM или PM как часть времени необязательно, как и секунды. Использовать 24-часовое время (19:45 вводится как 19:45, например), если AM или PM не указано.