![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу сконвертить '01Dec04' в TDate... [D7, WinXP]
GL00m © (2005-03-11 00:19:00)Пытаюсь сделать
StrToDate('01Dec04',fmt), где:
fmt : TFormatSettings;
потом
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,fmt);
потом
fmt.ShortDateFormat := 'ddmmmyy';
потом даже (сам удивляюсь, как придумал)
fmt.ShortMonthNames[1] := 'Jan';
... до декабря
И все равно не работает!!!
Почему???
begin...end (2005-03-16 19:35:00) [1]> Defunct © (16.03.05 18:24) [19]
> Чтобы "шариться" по чужему коду много ума не нужно.
Разумеется. И чтобы смотреть в справку - тоже. Но Вы не сделали ни того, ни другого. А просто вякнули на тему, в которой не разбираетесь (и уже не в первый раз). Отсюда вывод - у Вас нет даже этого, небольшого, ума.
> Если ты считаешь, что достаточно начитаться чтобы
> стать умным
Нет, не считаю. Этого недостаточно. Но это - одно из необходимых условий. Видимо, в Вашем случае оно не выполнено. Более того, огорчу Вас: иногда такое даже не лечится.
> это уровень Сальерри
А почитать что-нибудь Вам всё же не мешало бы. Хотя бы для того, чтобы правильно писать на русском языке.
> добро пожаловать в ignorelist
От меня Вы такой милости не дождётесь.
Defunct (2005-03-16 18:24:00) [2]Чтобы "шариться" по чужему коду много ума не нужно. Если ты считаешь, что достаточно начитаться чтобы стать умным, то это уровень Сальерри.
И вообще добро пожаловать в ignorelist.
begin...end (2005-03-16 16:30:00) [3]> GL00m (15.03.05 23:09) [17]
> логично было бы предположить, что обратно она
> сработает так же
Возможно. Но - не работает. Поэтому, для того чтобы использовать StrToDate, придётся буквенное обозначение месяца переводить в цифровое.
> Defunct
А что же Вы молчите? Вот уже и автор ветки говорит, что способ, посоветованный Вами, не работает. Вы думаете, он тоже заблуждается?
Defunct, возможно, у Вас хватит ума заглянуть в исходники StrToDate. И тогда Вы, возможно, увидите, что ни в самой StrToDate, ни в подпрограммах, вызываемых ею, даже не встречается идентификатор ShortMonthNames. А если он там не встречается (не используется) - значит, чему бы этот массив в записи TFormatSettings не был равен, результат работы функции StrToDate от этого не изменится. И поэтому StrToDate никогда не поймёт, что такое "Jan", "Dec" и т.д. Хотя, скорее всего, для Вас это всё слишком сложно.
Это ж насколько твердолобым нужно быть, чтобы, несмотря на очевидную неправильность совета, упрямо говорить, что он "проверен" и работает...
GL00m (2005-03-15 23:09:00) [4]To Zeqfreed:
Это, конечно, зашибись, но ведь есть стандартная функция и она должна как-то работать! =)))
To Defunct:
У меня так, действительно, тоже не работает - я забыл про это написать.
To begin...end:
Справку я по этому StrToDate скоро до дыр протру...
Там написано: "S must consist of two or three numbers...".
Все понятно. Но если сделать что-то типаDateToStr(GetDate,fmt), где fmt такой же, как и я сделал, то получится именно строка типа "01-Dec-04", логично было бы предположить, что обратно она сработает так же...
Если я был не прав в этом своем суждении, чтож... извиняюсь за разведенный здесь флейм по этому поводу.
begin...end (2005-03-15 19:52:00) [5]> Defunct © (15.03.05 19:05) [15]
Дык этта... понятно, что Вы написали , что ОНО работает. А ОНО всё же не работает. Причём это тоже "проверено в работе". Поэтому я и попросил Вас привести действительно рабочий код.
И пока Вы его не приведёте - все утверждения относительно его "рабочести" являются голословными.
Defunct (2005-03-15 19:05:00) [6]begin...end © (15.03.05 18:46) [14]
В [13] и так написано что проверено в работе, или с первого раза не понятно?
begin...end (2005-03-15 18:46:00) [7]> Defunct © (15.03.05 18:36) [13]
> Прежде чем советовать, я проверил то что советовал в
> работе.
LOL. И как - работает? Интересно было бы посмотреть на код. А то как-то голословно получается.
Defunct (2005-03-15 18:36:00) [8]begin...end © (15.03.05 15:03) [10]
Любитель справки..
Прежде чем советовать, я проверил то что советовал в работе. А вы коль знакомы с распарсиванием даты только по справке, так лучше б жевали.
Zeqfreed (2005-03-15 15:56:00) [9]GL00m (11.03.05 0:19)
function DecodeXDate(const SDate : String) : TDateTime;
const
Months = 'JanFebMarAprMayJunJulAugSepOctNovDec';
var
y, d : Integer;
m : String[3];
midx : Cardinal;
begin
Result := -1;
if not TryStrToInt(Copy(SDate, 1, 2), d) then Exit;
if not TryStrToInt(Copy(SDate, 6, 2), y) then Exit;
Inc(y, 2000);
m := Copy(SDate, 3, 3);
midx := Pos(m, Months) div 3 + 1;
Result := EncodeDate(y, midx, d);
end;
А так не подойдет? )
begin...end (2005-03-15 15:04:00) [10]> begin...end © (15.03.05 15:03) [10]
> по DateToStr
по StrToDate
begin...end (2005-03-15 15:03:00) [11]> Defunct © (11.03.05 01:40) [1]
> Defunct © (12.03.05 21:32) [5]
> Defunct © (15.03.05 10:27) [9]
Прежде чем советовать, лучше на всякий случай почитать справку. Хотя, если нравится сидеть в луже...
> GL00m (15.03.05 1:10) [8]
> Но он все равно ругается, что недопустимый, типа,
> формат данных! Почему???
Потому что такой формат данных действительно недопустим. Месяц в строке тоже должен быть строковым представлением числа. См. справку по DateToStr.
Defunct (2005-03-15 10:27:00) [12]fmt.ShortDateFormat := ' ddmmmyy';
s := '01-Dec-04';
GL00m (2005-03-15 01:10:00) [13]АААААААААААА!!!
Ну вот... Не ожидал. Короче... Все как и прежде, и вставляю я в строку эти "минусики"... Но он все равно ругается, что недопустимый, типа, формат данных! Почему??? Пожалуйста! Не пинайте меня ногами, объясните??? =(((
Напомню:
fmt : TFormatSettings;
tmpdate : TDate;
...
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,fmt);
fmt.ShortMonthNames[1] := 'Jan';
...
fmt.ShortMonthNames[12] := 'Dec';
fmt.DateSeparator := '-';
fmt.ShortDateFormat := 'dd-mmm-yy';
s := '01-Dec-04';
tmpdate := StrToDate(s,fmt);
На последней-то строчке и ругается...
GL00m (2005-03-14 23:44:00) [14]Ну и ладно. Ну и, наверно, вы правы. Спасибо. Не хрен с ним мучиться, не достойно оно того... =)))
Всем спасибо.
з.ы. Если вдруг кто узнает, как же это все-таки делается без модификации строки, черкните на мыло, плз?.. =))
SergP (2005-03-13 13:48:00) [15]
> [4] GL00m (12.03.05 12:56)
Добавь эти символы и не мучайся. Тем более если номер дня, название месяца и номер года состоят из фиксированого числа символов, то добавить минусы вообще просто:
Insert('-',s,6);
Insert('-',s,3);
Defunct (2005-03-12 21:32:00) [16]Неужели нельзя добавить два символа "-" до букв и после?
GL00m (2005-03-12 12:56:00) [17]Так вся беда в том, что не я пишу этот файл... Неужели нельзя такой очевидный формат даты как-нить автоматизировано перевести в TDate?.. =((( Я, конечно, понимаю, что и самому функцию такую несложно написать, но это уже крайний случай... Я пытался в этом fmt DateSeparator задавать просто '', но так, естественно не работает...
Silla (2005-03-11 10:54:00) [18]Может лучше в данный файл записывать дату с разделителем?
GL00m (2005-03-11 08:08:00) [19]Да... Это может быть... Но дело в том, что я эту строчку с датой читаю из файла. И мне тогда придется ее переделывать... А можно как-нибудь без разделителя?
Defunct (2005-03-11 01:40:00) [20]ожидается разделитель.
попробуйте так:
fmt.DateSeparator := '-';
fmt.ShortDateFormat := 'ddmmmyy';
StrToDate('01-Dec-04', fmt);