Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизНе могу сконвертить 01Dec04 в TDate... Найти похожие ветки
← →
GL00m (2005-03-11 00:19) [0]Пытаюсь сделать
StrToDate("01Dec04",fmt)
, где:
fmt : TFormatSettings;
потом
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,fmt);
потом
fmt.ShortDateFormat := "ddmmmyy";
потом даже (сам удивляюсь, как придумал)
fmt.ShortMonthNames[1] := "Jan";
... до декабря
И все равно не работает!!!
Почему???
← →
Defunct © (2005-03-11 01:40) [1]ожидается разделитель.
попробуйте так:
fmt.DateSeparator := "-";
fmt.ShortDateFormat := "ddmmmyy";
StrToDate("01-Dec-04", fmt);
← →
GL00m (2005-03-11 08:08) [2]Да... Это может быть... Но дело в том, что я эту строчку с датой читаю из файла. И мне тогда придется ее переделывать... А можно как-нибудь без разделителя?
← →
Silla © (2005-03-11 10:54) [3]Может лучше в данный файл записывать дату с разделителем?
← →
GL00m (2005-03-12 12:56) [4]Так вся беда в том, что не я пишу этот файл... Неужели нельзя такой очевидный формат даты как-нить автоматизировано перевести в TDate?.. =((( Я, конечно, понимаю, что и самому функцию такую несложно написать, но это уже крайний случай... Я пытался в этом fmt DateSeparator задавать просто "", но так, естественно не работает...
← →
Defunct © (2005-03-12 21:32) [5]Неужели нельзя добавить два символа "-" до букв и после?
← →
SergP © (2005-03-13 13:48) [6]
> [4] GL00m (12.03.05 12:56)
Добавь эти символы и не мучайся. Тем более если номер дня, название месяца и номер года состоят из фиксированого числа символов, то добавить минусы вообще просто:
Insert("-",s,6);
Insert("-",s,3);
← →
GL00m (2005-03-14 23:44) [7]Ну и ладно. Ну и, наверно, вы правы. Спасибо. Не хрен с ним мучиться, не достойно оно того... =)))
Всем спасибо.
з.ы. Если вдруг кто узнает, как же это все-таки делается без модификации строки, черкните на мыло, плз?.. =))
← →
GL00m (2005-03-15 01:10) [8]АААААААААААА!!!
Ну вот... Не ожидал. Короче... Все как и прежде, и вставляю я в строку эти "минусики"... Но он все равно ругается, что недопустимый, типа, формат данных! Почему??? Пожалуйста! Не пинайте меня ногами, объясните??? =(((
Напомню:
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);
На последней-то строчке и ругается...
← →
Defunct © (2005-03-15 10:27) [9]fmt.ShortDateFormat := "ddmmmyy";
s := "01-Dec-04";
← →
begin...end © (2005-03-15 15:03) [10]> 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.
← →
begin...end © (2005-03-15 15:04) [11]> begin...end © (15.03.05 15:03) [10]
> по DateToStr
по StrToDate
← →
Zeqfreed © (2005-03-15 15:56) [12]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;
А так не подойдет? )
← →
Defunct © (2005-03-15 18:36) [13]begin...end © (15.03.05 15:03) [10]
Любитель справки..
Прежде чем советовать, я проверил то что советовал в работе. А вы коль знакомы с распарсиванием даты только по справке, так лучше б жевали.
← →
begin...end © (2005-03-15 18:46) [14]> Defunct © (15.03.05 18:36) [13]
> Прежде чем советовать, я проверил то что советовал в
> работе.
LOL. И как - работает? Интересно было бы посмотреть на код. А то как-то голословно получается.
← →
Defunct © (2005-03-15 19:05) [15]begin...end © (15.03.05 18:46) [14]
В [13] и так написано что проверено в работе, или с первого раза не понятно?
← →
begin...end © (2005-03-15 19:52) [16]> Defunct © (15.03.05 19:05) [15]
Дык этта... понятно, что Вы написали, что ОНО работает. А ОНО всё же не работает. Причём это тоже "проверено в работе". Поэтому я и попросил Вас привести действительно рабочий код.
И пока Вы его не приведёте - все утверждения относительно его "рабочести" являются голословными.
← →
GL00m (2005-03-15 23:09) [17]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-16 16:30) [18]> GL00m (15.03.05 23:09) [17]
> логично было бы предположить, что обратно она
> сработает так же
Возможно. Но - не работает. Поэтому, для того чтобы использовать StrToDate, придётся буквенное обозначение месяца переводить в цифровое.
> Defunct
А что же Вы молчите? Вот уже и автор ветки говорит, что способ, посоветованный Вами, не работает. Вы думаете, он тоже заблуждается?
Defunct, возможно, у Вас хватит ума заглянуть в исходники StrToDate. И тогда Вы, возможно, увидите, что ни в самой StrToDate, ни в подпрограммах, вызываемых ею, даже не встречается идентификатор ShortMonthNames. А если он там не встречается (не используется) - значит, чему бы этот массив в записи TFormatSettings не был равен, результат работы функции StrToDate от этого не изменится. И поэтому StrToDate никогда не поймёт, что такое "Jan", "Dec" и т.д. Хотя, скорее всего, для Вас это всё слишком сложно.
Это ж насколько твердолобым нужно быть, чтобы, несмотря на очевидную неправильность совета, упрямо говорить, что он "проверен" и работает...
← →
Defunct © (2005-03-16 18:24) [19]Чтобы "шариться" по чужему коду много ума не нужно. Если ты считаешь, что достаточно начитаться чтобы стать умным, то это уровень Сальерри.
И вообще добро пожаловать в ignorelist.
← →
begin...end © (2005-03-16 19:35) [20]> Defunct © (16.03.05 18:24) [19]
> Чтобы "шариться" по чужему коду много ума не нужно.
Разумеется. И чтобы смотреть в справку - тоже. Но Вы не сделали ни того, ни другого. А просто вякнули на тему, в которой не разбираетесь (и уже не в первый раз). Отсюда вывод - у Вас нет даже этого, небольшого, ума.
> Если ты считаешь, что достаточно начитаться чтобы
> стать умным
Нет, не считаю. Этого недостаточно. Но это - одно из необходимых условий. Видимо, в Вашем случае оно не выполнено. Более того, огорчу Вас: иногда такое даже не лечится.
> это уровень Сальерри
А почитать что-нибудь Вам всё же не мешало бы. Хотя бы для того, чтобы правильно писать на русском языке.
> добро пожаловать в ignorelist
От меня Вы такой милости не дождётесь.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.037 c