![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
String to Date [D5, D6, D7, Win95/98, WinME, Win2k, WinXP]
Grihan © (2006-05-05 20:07:00)Здравствуйте.
Подскажите пожалуйста, как конвертнуть строчку "10.10.2005 г." (дата в Болгарской локале) в TDateTime?
Спасибо.
KilkennyCat (2006-05-08 13:42:00) [1]
> [52] TUser © (08.05.06 13:34)
Как дополнительная фишка - почему бы и нет, если не нарушает работу программы. Главное, в справке описать и оценить экономическую выгоду.
TUser (2006-05-08 13:34:00) [2]> Надо ему давать максимально много прав
Разрешить вводить дату по древнеегипетскому календарю?
KilkennyCat (2006-05-08 13:27:00) [3]
> [50] KilkennyCat © (08.05.06 13:26)
Опечатался.
Будет однозначноеТЗ - будет грамотное решение.
KilkennyCat (2006-05-08 13:26:00) [4]По поводу локализации программ написано куча статей, от теоретических до практических. Если память не изменяет, даже в стандартных делфевых примерах есть.
ИМХО, тут нужно просто четкое ТЗ.
Будет неоднозначное ТЗ - будет грамотное решение.
> TUser © (08.05.06 10:26)
> Пользователь - существо бесправное.
Не, так нельзя. Надо ему давать максимально много прав, но с умом, чтоб он сам себе не навредил при всем желании.
Virgo_Style (2006-05-08 13:13:00) [5]Я бы сделал стандартный DateTimePicker или MonthCalendar, а уж рядом кнопочка для выбора известных дат из списка. Или ComboBox...
TUser (2006-05-08 10:26:00) [6]Пользователь - существо бесправное. Он должен вводить данные в том формате, который предусмотрен в программе. А если ему вздумается написать today на китайском наречии, то программа должна сообщить об ошибке и попросить ввести дату еще раз.
Шутник (2006-05-07 21:47:00) [7]Гриха сутки трепался на форуме по пустяковому вопросу, вместо того, чтобы сесть, подумать и решить проблему без всяких выпендрёжей типа DecodeDate(StrToDate(DateToStr(TryStrToDate(TryDateToStr(TxxSuperDateEdit.Date)) ))).
homm (2006-05-07 21:30:00) [8]
> [41] Grihan (06.05.06 21:02)
> 4) в случае, если пользователю повезло, и он ввел в редактор
> распознаваемыйтекст, мы его конвертим в TDateTime иначе
> выдаем сообщение об ошибке.
Прежде чем хамить людям, которые тебе помогают, описал бы задачу. Что значит "распознаваемый". Наверное сам даже не задумывался.
Virgo_Style (2006-05-07 14:29:00) [9]а если наш болгарин написал 02.03.17, то программа должна сама определить, где месяц, где день, и какое столетие имелось в виду? Как-то нереально это.
Мефисто (2006-05-06 21:29:00) [10]Grihan (06.05.06 20:55) [40]
>> мне что, заюзать TryStrToDate и не парится???
Заюзать или расширить функционал. На сколько она может, на столько она дату и распарсит (см. исходники). Ест-но разработчики не могут предусмотреть все варианты вывода даты по маске (кто знает кому и чего взбредет в голову). А как вы сами понимаете, за вас парсер под ваши нужды писать никто не будет.
И вообщем если честно, не совсем ясен ваш подход в данной ситуации. Пользователь вводит дату на свой манер, а программе это творчество расхлебывать? Почему бы просто не организовать давно проверенное средство - ввод данных по маске? Если создается некий SuperDateEdit - то распарсить дату вам придется... сложновато. Одно будет облегчение если вводу данных предшествовала хоть какая нибудь маска ввода, а в ином случае будет затруднительно отличить например: 10.10.2006 - на каком месте месяц, а на каком день? Можно задать такую маску, что распарсить замучаешься: Сегодня 6 - 2006 год (май). Как анализировать? Плюс возможные опечатки пользователя.
Вобщем, сам решай, анализируй, мучайся ;)
Удачи в творческих успехах! :)
KilkennyCat (2006-05-06 21:25:00) [11]Удалено модератором
mfender (2006-05-06 21:09:00) [12]А болгары не пишут в TMaskEdit?
Grihan (2006-05-06 21:02:00) [13]
> > 1. Что куда вводится "Болгаром"?
> > 2. Что там изначально (до того, как этот "Болгар" фокус
> > переведет на этот компонент) уже указано?
> > 3. Что он может и должен туда вводить?
> > 4. А что получиться должно уже ясно: TDateTime.
1) Есть TxxSuperDateEdit, лежащий на форме. туда и вводит.
2) Предположительно программист, пожелающий воспользоватся TxxSuperDateEdit может захотеть проинициализировать TxxSuperDateEdit сегодняшним числом, чтобы конечному пользователю облегчить жизнь
3) конечный пользователь может вводить все что угодно, например:
a) 10.10.2005
b) 10.10.2005 г.
c) today
d) f...k
4) в случае, если пользователю повезло, и он ввел в редактор распознаваемый текст, мы его конвертим в TDateTime иначе выдаем сообщение об ошибке.
Grihan (2006-05-06 20:55:00) [14]Мефисто!
<ешкин кот> ...
мне что, заюзать TryStrToDate и не парится??? а что делать, если юзер написал в редакторе матом??? или "ешкин кот"?
для этого и анализируется результат работы трансформаторных функций. И как вы сами понимаете, мне будет трудно компьютеру объяснить следующее: не смотря на то, что функция TryStrToDate затрудняется пропарсить строку, она справилась со своей задачей. Честь ей и хвала.
Gast (2006-05-06 17:16:00) [15]
> KBsoft © (06.05.06 16:43) [38]
> Тогда давайте с нуля:
> 1. Что куда вводится "Болгаром"?
> 2. Что там изначально (до того, как этот "Болгар" фокус
> переведет на этот компонент) уже указано?
> 3. Что он может и должен туда вводить?
> 4. А что получиться должно уже ясно: TDateTime.
Вероятно, что действия болгара логически определить невозможно: отрицая - он будет кивать головой, а утверждая наоборот - мотать ей в стороны. Что говорить о программах, когда случаются курьёзы в реальном общении кого-нибудь с болгарами:)
KBsoft (2006-05-06 16:43:00) [16]
> Здорово придумал. Обломать кустомера. Нехай вообще только
> на экран смотрит. :) Жаль, что денег тогда он не даст :(
>
> Да, Вы правы, писать " г." Болгар не будет. Но и стирать
> эту " г.", при редактировании даты он тоже не будет. :(
Тогда давайте с нуля:
1. Что куда вводится "Болгаром"?
2. Что там изначально (до того, как этот "Болгар" фокус переведет на этот компонент) уже указано?
3. Что он может и должен туда вводить?
4. А что получиться должно уже ясно: TDateTime.
А то так долго можно разговаривать, ходя вокруг этого "Болгара" :-)
Мефисто (2006-05-06 15:27:00) [17]wicked © (06.05.06 15:11) [36]
>> 2 цифры - число и месяц текущего года....
Это как? До меня не дошло? :)
А как с числом > 9 + число под месяц тоже > 9
Это как выгдядит?
wicked (2006-05-06 15:11:00) [18]http://regexpstudio.com/- качаем отсюда прекраснейший и бесплатнейший класс для работы с регекспами, пишем свои регекспы для выпаршивания несчастных дат и тихо радуемся жизни....
кстати, для улучшения юзабилити я еще такое встречал -
ежели ввели 1 цифру - это число текущего месяца текущего года...
2 цифры - число и месяц текущего года....
удобно.... но сложно..... поэтому меньше разводите шума и делайте так, как удобно и вам и юзеру....
тиресна, много ли болгаров с первого раза и без ошибок напишут слова "tomorrow" и "yesterday"?....
Мефисто (2006-05-06 14:50:00) [19]Grihan (06.05.06 09:52) [32]
Условия задачи решены.
У меня в переменной D - содержадась искомая дата. Не пробовали проверить? Может у меня ОС особая? :) Понять так и не могу, почему у меня работает? Что я делаю не так?
Либо воспользуйтесь советом
Anatoly Podgoretsky © (06.05.06 12:11) [33]
Либо доведите до ума TryStrToDate, если считаете, что она не достаточно функциональна.
Jeer (2006-05-06 13:41:00) [20]или экстрасенсов.