Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.292 c
1-1110443227
paule
2005-03-10 11:27
2005.03.27
вычленение числа из строки


1-1110439516
Эли
2005-03-10 10:25
2005.03.27
Чтобы можно было увидеть русские шрифты


1-1110539969
Blein_mono
2005-03-11 14:19
2005.03.27
Интегралы


14-1110281620
Свердликовский Михаил
2005-03-08 14:33
2005.03.27
Заработок на Freeware


1-1110428444
diabolik_krsk
2005-03-10 07:20
2005.03.27
TThread + ListBox + FindNext





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский