Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Вниз

String to Date   Найти похожие ветки 

 
Grihan   (2006-05-05 20:07) [0]

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

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

Спасибо.


 
Лшдлуттнсфе   (2006-05-05 20:29) [1]

StrToDateTime


 
Мефисто   (2006-05-05 20:42) [2]

DecodeDate()
StrToDate()

+ F1 or DateUtils.pas


 
Grihan   (2006-05-05 20:57) [3]

Вы сами пробовали конвертнуть строку "10.10.2005 г." в дату, прежде чем советы давать?

P.S. вопрос задан вполне конкретно: есть строка "10.10.2005 г.". Требуется преобразовать ее в дату, типа TDateTime.


 
Grihan   (2006-05-05 21:03) [4]

Подчеркну сразу, что советы, по поводу удаления 3-х последних символов или аналогичные им (например: найти букву "г" и уталить все, что после нее) слишком очевидны, а потому неприемлимы.


 
Лшдлуттнсфе   (2006-05-05 21:07) [5]


> 3] Grihan   (05.05.06 20:57)


Вы сами пробовали справку читать? Не установлена? Лень? Не найти клавишу Ф1? Или еще какая-проблема?

Не беспокойтесь!
Я напечатаю продвинутым методом копи-пасте специально для Вас!

function StrToDate(const S: string; const FormatSettings: TFormatSettings): TDateTime; overload;

Description

S must consist of two or three numbers, separated by the character defined by the DateSeparator global variable or its TFormatSettings equivalent. The order for month, day, and year is determined by the ShortDateFormat global variable or its TFormatSettings equivalent--possible combinations are m/d/y, d/m/y, and y/m/d.

If S contains only two numbers, it is interpreted as a date (m/d or d/m) in the current year.

Year values between 0 and 99 are converted using the TwoDigitYearCenturyWindow. This value is stored either in a global variable (first form) or as a field in the FormatSettings parameter (second form) See "Currency and Date-Time Formatting Variables" for more information.

The first form of StrToDate is not thread-safe, because it uses localization information contained in global variables. The second form of StrToDate, which is thread-safe, refers to localization information contained in the FormatSettings parameter. Before calling the thread-safe form of StrToDate, you must populate FormatSettings with localization information. To populate FormatSettings with a set of default locale values, call GetLocaleFormatSettings.

Успехов.


 
KilkennyCat ©   (2006-05-05 21:11) [6]


> Подчеркну сразу, что советы, по поводу удаления 3-х последних
> символов или аналогичные им (например: найти букву "г" и
> уталить все, что после нее) слишком очевидны, а потому неприемлимы.


TTBOMK


 
Grihan   (2006-05-05 21:35) [7]

:)
Вы упорно не хотите тестировать свои же советы :)
Может попробуете все таки?
Я воспользуюсь Вашим методом Copy/Paste, чтобы Вас не утруждать.
StrToDate(DateToStr(Date));
Единственное, что я не смогу сделать - так это выставить Болгарскую локале у Вас на машине. Попробуйте.

PS может  другие какие функции знаете? :) API-шные например (но чтоб работали :) )? я знаю точно, что в .NET таких проблем нет


 
Grihan   (2006-05-05 21:43) [8]

Я так понял, что Лшдлуттнсфе = KilkennyCat
но не понял, что такое TTBOMK

P.S. Действительно, Вы очень интересный :)


 
Мефисто   (2006-05-05 21:50) [9]

Grihan    (05.05.06 21:43) [8]

Для уснувших за клавиатурой :)

Повторяю пост

Лшдлуттнсфе    (05.05.06 21:07) [5]

function StrToDate(const S: string; const FormatSettings: TFormatSettings): TDateTime; overload;

TFormatSettings + F1 + SysUtils.Pas + DateUtils.pas + кучуинтересного узнаете


 
Leonid Troyanovsky ©   (2006-05-05 22:04) [10]


> Grihan   (05.05.06 20:07)  

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


А можно полюбопытствовать, как в оной локали выглядит
ShortDateFormat, или, скажем, LOCALE_SSHORTDATE?

--
Regards, LVT.


 
Grihan   (2006-05-05 22:04) [11]

нет, так не пойдет.
Вы пожалуйста ответьте не следующие вопросы:
1) пробовали ли Вы сами?
2) Вы издеваетесь?
3) Как конвертнуть строчку "10.10.2005 г." (дата в Болгарской локале) в TDateTime?


 
MBo ©   (2006-05-05 22:05) [12]

Как можно убедиться в исходниках, ничего чудесного функции вроде StrToDate не делают, а просто разбирают входную строку.
Ничего не мешает сделать это самостоятельно - по крайней мере, отрезать г., и ничего неприемлемого тут нет, а остаток прекрасно переведется StrToDate (c установкой ShortDateFormat, если на разных машинах он меняется)


 
Grihan   (2006-05-05 22:06) [13]

Leonid Troyanovsky wrote:

> А можно полюбопытствовать, как в оной локали выглядит
> ShortDateFormat, или, скажем, LOCALE_SSHORTDATE?

ShortDateFormat = "dd.M.yyyy "г.""


 
Grihan   (2006-05-05 22:10) [14]

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


 
app ©   (2006-05-05 22:38) [15]

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


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

Лшдлуттнсфе    (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;


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

Grihan    (05.05.06 22:10) [14]

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


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


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


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


 
Grihan   (2006-05-05 22:58) [19]

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


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


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


 
jack128 ©   (2006-05-05 23:05) [20]

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 23:09) [21]


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


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


 
Grihan   (2006-05-05 23:12) [22]


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


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


 
KBsoft ©   (2006-05-05 23:14) [23]


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

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


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

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

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


 
Grihan   (2006-05-05 23:20) [25]


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


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

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


 
Grihan   (2006-05-05 23:24) [26]


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


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

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


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

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


 
Grihan   (2006-05-05 23:30) [28]


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


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


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

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

 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;


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

Grihan    (05.05.06 23:30) [28]

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


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


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

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

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

Зачем?

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

Уже "Да"

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

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


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

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


 
Anatoly Podgoretsky ©   (2006-05-06 12:11) [33]

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


 
Jeer ©   (2006-05-06 13:41) [34]

или экстрасенсов.


 
Мефисто   (2006-05-06 14:50) [35]

Grihan    (06.05.06 09:52) [32]

Условия задачи решены.

У меня в переменной D - содержадась искомая дата. Не пробовали проверить? Может у меня ОС особая? :) Понять так и не могу, почему у меня работает? Что я делаю не так?

Либо воспользуйтесь советом
Anatoly Podgoretsky ©   (06.05.06 12:11) [33]

Либо доведите до ума TryStrToDate, если считаете, что она не достаточно функциональна.


 
wicked ©   (2006-05-06 15:11) [36]

http://regexpstudio.com/ - качаем отсюда прекраснейший и бесплатнейший класс для работы с регекспами, пишем свои регекспы для выпаршивания несчастных дат и тихо радуемся жизни....
кстати, для улучшения юзабилити я еще такое встречал -
ежели ввели 1 цифру - это число текущего месяца текущего года...
2 цифры - число и месяц текущего года....
удобно.... но сложно..... поэтому меньше разводите шума и делайте так, как удобно и вам и юзеру....

тиресна, много ли болгаров с первого раза и без ошибок напишут слова "tomorrow" и "yesterday"?....


 
Мефисто   (2006-05-06 15:27) [37]

wicked  ©   (06.05.06 15:11) [36]

>> 2 цифры - число и месяц текущего года....

Это как? До меня не дошло? :)

А как с числом > 9 + число под месяц тоже > 9
Это как выгдядит?


 
KBsoft ©   (2006-05-06 16:43) [38]


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


Тогда давайте с нуля:
1. Что куда вводится "Болгаром"?
2. Что там изначально (до того, как этот "Болгар" фокус переведет на этот компонент) уже указано?
3. Что он может и должен туда вводить?
4. А что получиться должно уже ясно: TDateTime.

А то так долго можно разговаривать, ходя вокруг этого "Болгара" :-)


 
Gast   (2006-05-06 17:16) [39]


> KBsoft ©   (06.05.06 16:43) [38]


> Тогда давайте с нуля:
> 1. Что куда вводится "Болгаром"?
> 2. Что там изначально (до того, как этот "Болгар" фокус
> переведет на этот компонент) уже указано?
> 3. Что он может и должен туда вводить?
> 4. А что получиться должно уже ясно: TDateTime.

Вероятно, что действия болгара логически определить невозможно: отрицая - он будет кивать головой, а утверждая наоборот - мотать ей в стороны. Что говорить о программах, когда случаются курьёзы в реальном общении кого-нибудь с болгарами:)


 
Grihan   (2006-05-06 20:55) [40]

Мефисто!

<ешкин кот> ...

мне что, заюзать TryStrToDate и не парится???  а что делать, если юзер написал в редакторе матом??? или "ешкин кот"?
для этого и анализируется результат работы трансформаторных функций. И как вы сами понимаете, мне будет трудно компьютеру объяснить следующее: не смотря на то, что функция TryStrToDate затрудняется пропарсить строку, она справилась со своей задачей. Честь ей и хвала.



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.013 c
3-1145602125
daimyo
2006-04-21 10:48
2006.06.18
DBGrid получение имени колонки


15-1148187592
mlm68
2006-05-21 08:59
2006.06.18
Как отправить SMS/MMS?


15-1148274904
Александр Иванов
2006-05-22 09:15
2006.06.18
Сумма прописью


4-1143054881
DesWind
2006-03-22 22:14
2006.06.18
Создание панели задач


15-1148388558
AlexanderMS
2006-05-23 16:49
2006.06.18
Сжатие программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский