Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Не могу сконвертить 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.04 c
1-1110877160
Пубертанец
2005-03-15 11:59
2005.03.27
Как при выполнении цикла перехватить нажатие на клавишу Escape


4-1108468976
pasha_golub
2005-02-15 15:02
2005.03.27
Запуск процесса из ресурса


1-1110895436
Mamed
2005-03-15 17:03
2005.03.27
UrlEncode


1-1110438236
AlexTregubov
2005-03-10 10:03
2005.03.27
Иконки типов шрифтов


4-1108140456
Artur
2005-02-11 19:47
2005.03.27
Буфер обмена