![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как преобразовать строку в дату? [D7]
kull © (2007-04-23 23:05:00)Есть дата в виде строки в формате "dd/MMM/yy"
Надо преобразовать ее в TDateTime.
Что то я не могу понять как это сделать?
{RASkov} (2007-04-24 01:05:00) [21]> [7] Германн © (24.04.07 01:01)
> Я не знаю такой overloaded версии StrToDate :(
function StrToDate(const S: string;
const FormatSettings: TFormatSettings): TDateTime;
begin
if not TryStrToDate(S, Result, FormatSettings) then
ConvertErrorFmt(@SInvalidDate, [S]);
end;
function TryStrToDate(const S: string; out Value: TDateTime;
const FormatSettings: TFormatSettings): Boolean;
var
Pos: Integer;
begin
Pos := 1;
Result := ScanDate(S, Pos, Value, FormatSettings) and (Pos > Length(S));
end;
Дальше не буду :)
В сабже D7.
Германн (2007-04-24 01:01:00) [22]
> kull (23.04.07 23:05)
>
> Есть дата в виде строки в формате "dd/MMM/yy"
> Надо преобразовать ее в TDateTime.
Имхо, это одна из наиболее сложных задач для решения в "общем" случае. Могу только дать несколько рекомендаций. Если Дата/Время вводится пользователем через интерфейс программы, то настоятельно рекомендую использовать для ввода данных компонент, заточенный именно под такую задачу. TDateTimePicker, TMonthCalendar, TDateEdit(RxLib) etc. Если же строка с датой получена извне интерфейса программы, то нужно заранее знать её точныйформат. И вот тогда можно применить решение {RASkov} (24.04.07 00:41) [4]. Только с небольшим замечанием. Я не знаю такой overloadedверсии StrToDate :( Но я и не знаю Д7.
{RASkov} (2007-04-24 00:55:00) [23]> Есть еще переменная ShortMonthNames...
ShortMonthNames: array[1..12] of string;
и дальше что? Это для вывода даты, а не для ее "распознования"...
Хотя может все и не так.... но вряд-ли.
kull (2007-04-24 00:48:00) [24]А я все же надеялся, что обойдется без "в ручную" =)
Спасибо =)
PS:
Есть еще переменная ShortMonthNames...
{RASkov} (2007-04-24 00:41:00) [25]> даты выглядит так 24/апр/07
Ну тогда походу только в ручную, день и год проще, а вот месяц анализирую, сравнивай, приводи....
или так:
const SDt: String = '24/апр/07';
var S: String;
D: TDate;
FD: TFormatSettings;
begin
FD.DateSeparator:='/';
FD.ShortDateFormat:='dd/mmm/gg';
S:=StringReplace(SDt, 'янв', '01', []);
S:=StringReplace(S, 'фев', '02', []);
S:=StringReplace(S, 'мар', '03', []);
S:=StringReplace(S, 'апр', '04', []);
S:=StringReplace(S, 'май', '05', []);
S:=StringReplace(S, 'июн', '06', []);
S:=StringReplace(S, 'июл', '07', []);
S:=StringReplace(S, 'авг', '08', []);
S:=StringReplace(S, 'сен', '09', []);
S:=StringReplace(S, 'окт', '10', []);
S:=StringReplace(S, 'ноя', '11', []);
S:=StringReplace(S, 'дек', '12', []);
ShowMessage(S);
D:=StrToDate(S, FD);
ShowMessage(DateToStr(D));
end;
kull (2007-04-23 23:30:00) [26]А "dd/MMM/yy" в виде даты выглядит так 24/апр/07
kull (2007-04-23 23:28:00) [27]При данном формате даты эта функция (StrToDate) не помогает=(
Либо я что-то не так делаю...
из хелпа:
S must consist of two or three numbers, separated by the character defined by the DateSeparator global variable or its TFormatSettings equivalent.
{RASkov} (2007-04-23 23:22:00) [28]function StrToDate(const S: string; const FormatSettings: TFormatSettings): TDateTime;