![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
String to Date [D5, D6, D7, Win95/98, WinME, Win2k, WinXP]
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]если резать "г." для Болгаров, то, какие-нибуть арабы тоже захотят что-нибудь отрезать. Так на всех ненапасешся :)...