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?

Спасибо.


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]

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


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

Наверх

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