Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как преобразовать строку в дату? [D7]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо