опять StrToDateTime или о чем думали в борланде?
От: Spaun2002 Россия  
Дата: 20.08.07 11:29
Оценка:
Есть такая интересная функция.

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



Проблема в том, что она не работает. И вот почему:
При использовании в настройках локали формата для ShortDate вида dd.mm.yyyy и подобных все впорядке. Но стоит указать в формате dd-mmm-yyyy или dd-mmmm-yyyy или ddd-mm-yyyy использование этой функции не представляется возможным. Особенность этих форматов — день или месяц указываются не цифрами а буквами.
Если кому-то не лень посмотреть исходник этой функции, то там есть такие интересные строки:

  if not (ScanNumber(S, Pos, N1, L1) and ScanChar(S, Pos, DateSeparator) and
    ScanNumber(S, Pos, N2, L2)) then Exit;


Из этих двух замечательных строчек можно видеть, что борланд вообще не расчитывал принимать буквы в строчке из которой конвертится. Если посмотреть на функцию дальше, то видно, что из FormatSettings ничего кроме DateSeparator и TimeSeparator не используется вообще.

Кто не верит, пусть попробует установить в локали короткий формат для даты dd-mmm-yyyy и преобразовать из строки '10-янв-2007' в дату.

Собственно вопросы:
1. Риторический — о чем думали в борланде когда это писали?
2. Как с этим можно бороться (кроме как написать собственный функционал с учетом всего, что на самом деле есть в FormatSettings'ах)? Есть ли готовые решения?

Просто смотря на .NET даж завидно становится, там все учтено. Но в силу обстоятельств приходится использовать детище борланда.
П.С. Извиняюсь за много текста, просто уже накипело
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.