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

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

String to Date [D5, D6, D7, Win95/98, WinME, Win2k, WinXP]


Страницы:   1 2 3

Grihan ©   (2006-05-05 20:07:00) 

Здравствуйте.

Подскажите пожалуйста, как конвертнуть строчку "10.10.2005 г." (дата в Болгарской локале) в TDateTime?

Спасибо.


Anatoly Podgoretsky   (2006-05-06 12:11:00) [21]

Задача преобразования неизвестных данныйх сводится к парсингу с применением Искуственного Интеллекта


Grihan   (2006-05-06 09:52:00) [22]

Мефисто, а Вас не пугает, что TryStrToDate вернуло False? Если Ва нет, то меня пугает, ибо в Вашем пресловутом хелпе, на который Вы меня постоянно пытаетесь направить написано, что дата в этом случае не валидная. Более того, зачем Вы постоянно пытаетесь получить FormatSettings? Если Вы выставили Болгарскую локале, то все нужные значения уже в глобольных переменных.


Плохиш   (2006-05-06 01:53:00) [23]


> Мефисто   (06.05.06 00:12) [30]

Легко же тебя на "СЛАБО" развести ;-)

> Grihan   (05.05.06 22:04) [11]
> нет, так не пойдет.
> Вы пожалуйста ответьте не следующие вопросы:
> 1) пробовали ли Вы сами?

Зачем?

> 2) Вы издеваетесь?

Уже "Да"

> 3) Как конвертнуть строчку "10.10.2005 г." (дата в Болгарской
> локале) в TDateTime?

Уже сказали, но никого это не интересует.


Мефисто   (2006-05-06 00:12:00) [24]

Grihan    (05.05.06 23:30) [28]

Все умеет, главное в справке порыться.
Если будешь придераться и опять ни чего не работает, то на момент тестов у меня в региональных установках была Болгарская.


Мефисто   (2006-05-06 00:08:00) [25]

Покапавшись в справке решил дело так:

 const
   UserD = 'dd.M.yyyy';
   XD = '06.5.2006 ã.';
 var
   FS: TFormatSettings;
   S, SysD: String;
   D: TDateTime;
begin
 D := 0;
 FillChar(FS, SizeOf(FS), #0);
 GetLocaleFormatSettings(LOCALE_USER_DEFAULT, FS);
 SysD := FS.ShortDateFormat;
 TryStrToDate(XD, D, FS);
 FS.ShortDateFormat := UserD;
 DateTimeToString(S, UserD, D, FS);
 Caption := S;
 FS.ShortDateFormat := SysD;
end;


Grihan   (2006-05-05 23:30:00) [26]


> Ну выделяй просто из строки "ДД.ММ.ГГГГ", а остальное игнорируй.
>
> Или просто хочется поговорить?


вследствии того, что с Болгарскими датами дельфа (и система, кстати тоже) нормально работать не умеет (это потому, что система нипель : туда дуй DateToStr, а оттуде ничего StrToDate), то придется плясать с бубном. :(


Gast   (2006-05-05 23:24:00) [27]

Ну выделяй просто из строки "ДД.ММ.ГГГГ", а остальное игнорируй.
Или просто хочется поговорить?


Grihan   (2006-05-05 23:24:00) [28]


> А  если пользователь напишет
> "в день рождения моей бабушки", программа не должна случайно
> писать "16 апреля 1910 года"?


Если заасигнен соответствующий евент в котором текст распознается или ресурс строка залокализована, то должна

P.S. советы по изменению юзабилити неприемлимы


Grihan   (2006-05-05 23:20:00) [29]


> А отруби ему эту возможность. Пусть только цифры да точки
> лупит.
> Что-то сомневаюсь, что этот "Болгар" после года поставит
> один(!) пробел
> букву "г" и затем точку не забудет. Ну о-о-о-очень сомневаюсь.
>


Здорово придумал. Обломать кустомера. Нехай вообще только на экран смотрит. :) Жаль, что денег тогда он не даст :(

Да, Вы правы, писать " г." Болгар не будет. Но и стирать эту " г.", при редактировании даты он тоже не будет. :(


Гаврила   (2006-05-05 23:17:00) [30]

> мешает то, что пользователь может ввести today, tomorrow
> или, еще хуже, mar1

А  если пользователь напишет
"в день рождения моей бабушки", программа не должна случайно писать "16 апреля 1910 года"?


KBsoft   (2006-05-05 23:14:00) [31]


> мешает то, что пользователь может ввести today, tomorrow
> или, еще хуже, mar1

А отруби ему эту возможность. Пусть только цифры да точки лупит.
Что-то сомневаюсь, что этот "Болгар" после года поставит один(!) пробел
букву "г" и затем точку не забудет. Ну о-о-о-очень сомневаюсь.


Grihan   (2006-05-05 23:12:00) [32]


> function PleaseConvertThisString(const s: string): TDateTime;
>
> begin
>  Result := EncodeDate(2005, 10, 10)
> end;


:)
все верно
задача расширяется :)
теперь эта функция должна работать для всех Болгарских дат


Grihan   (2006-05-05 23:09:00) [33]


> Что мешает выкинуть все символы кроме цифр и точек?


мешает то, что пользователь может ввести today, tomorrow или, еще хуже, mar1


jack128   (2006-05-05 23:05:00) [34]

Grihan   (05.05.06 22:58) [19]
Более того стояла конкретная задача:
var
S: string;
Date: TDiteTime;
begin
S:= '10.10.2005 г';
Date := PleaseConvertThisString(S);
end;
реализовать функцию PleaseConvertThisString.


ну если для даннойконкретной задачи, то так:
function PleaseConvertThisString(const s: string): TDateTime;
begin
 Result := EncodeDate(2005, 10, 10)
end;


Grihan   (2006-05-05 22:58:00) [35]

Уважаемый Мефисто, Вы Русский?
Болгар напишет дату на своем родном: "10.10.2005 г." (DateTimePicker вообще не причем, в текстовом редакторе написал), как мне его конвертить?
Более того стояла конкретная задача:


var
 S: string;
 Date: TDiteTime;
begin
 S:= '10.10.2005 г';
 Date := PleaseConvertThisString(S);
end;


реализовать функцию PleaseConvertThisString.


Гаврила   (2006-05-05 22:46:00) [36]


> какие-нибуть арабы тоже захотят что-нибудь отреза


Уже режут. Равно как и Евреи.
По сабжу: Что мешает выкинуть все символы кроме цифр и точек?


Мефисто   (2006-05-05 22:41:00) [37]

Grihan    (05.05.06 22:10) [14]

Кстати, ты вредная личность. Переключился в региональных настроках на Болгарский все ок, переключился обратно на русский - винда устоновочный сидюк просит. И как после этого людям помогать... :(


Мефисто   (2006-05-05 22:39:00) [38]

Лшдлуттнсфе    (05.05.06 21:07) [5]
Мефисто    (05.05.06 21:50) [9]

Для инвалидов повторим :)

 var
   FS: TFormatSettings;
begin
 FillChar(FS, SizeOf(FS), #0);
 GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FS);
 FS.ShortDateFormat := 'dd.m.yyyy';
 Caption := DateToStr(DateTimePicker1.DateTime, FS);
end;


app   (2006-05-05 22:38:00) [39]

Кому сейчас легко и будь повежливее, не мы к тебе пришли, а ты к нам.


Grihan   (2006-05-05 22:10:00) [40]

если резать "г."  для Болгаров, то, какие-нибуть арабы тоже захотят что-нибудь отрезать. Так на всех ненапасешся :)...


Страницы:   1 2 3

Наверх

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