![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
формат даты [D6, XP]
начинающий41 © (2012-06-28 11:29:00)подскажите есть ли какая нибудь функция в delphi которая переводит формат даты как '01.01.2012' на 01 января 2012 г
Юрий Зотов (2012-07-01 03:39:00) [1]
> turbouser © (30.06.12 23:07) [16]
Это же не я съел букву.
:o)
Германн (2012-07-01 02:09:00) [2]Странно что АП не полностью "отреагировал" на вопрос в топике.
Германн (2012-07-01 01:56:00) [3]
> turbouser © (30.06.12 23:07) [16]
>
>
> > Юрий Зотов ©
>
> Буквоед ;)
С чего ты взял, что суть ошибки в отсутствии сдвоенной буквы t в имени функции?
:)
turbouser (2012-06-30 23:07:00) [4]
> Юрий Зотов ©
Буквоед ;)
DVM (2012-06-30 22:55:00) [5]
> Rouse_ © (29.06.12 00:09) [9]
> иначе могут быть проблемы при дальнейшей конкатенации строк,
> где упремся в ноль.
с конкатенацией проблем как раз не будет, дельфийской длинной строке ей глубоко фиолетово на ее содержимое, а вот при первом же приведении к PChar будут проблемы.
Юрий Зотов (2012-06-30 22:48:00) [6]
> jack128_ (30.06.12 01:10) [13]
В заголовке функции.
jack128_ (2012-06-30 01:10:00) [7]
> в какой конкретно ошибка?
jack128_ (2012-06-30 01:10:00) [8]
> Юрий Зотов © (29.06.12 17:32) [11]
в этих двух:
function GetFormatedDate(Value: TDateTime): string;
Result := '';
нету ошибок. в какой конкретно.
Юрий Зотов (2012-06-29 17:32:00) [9]> Rouse_ © (28.06.12 11:48) [2]
Ошибка в первой же строке кода.
Плохиш (2012-06-29 16:27:00) [10]
> Rouse_ © (28.06.12 21:14) [6]
Ну да, ну да, сейчас я буду не только кусок из старейшего пробного, первого попавшегося под руку кода копировать, но и время тратить на его причёсывание. А как же дать вопрошающему ещё и подумать? :-)
Rouse_ (2012-06-29 00:09:00) [11]
> NoUser (28.06.12 23:19) [7]
Ой блин, пардон, вообще не правильно прочитал...
Да, так тоже можно, но финализирующий ноль все равно придется отсечь, иначе могут быть проблемы при дальнейшей конкатенации строк, где упремся в ноль.
Rouse_ (2012-06-28 23:52:00) [12]Удалено модератором
Примечание: пардон - не о том :)
NoUser (2012-06-28 23:19:00) [13]
> Rouse_ © (28.06.12 11:48) [2]
А зачем через буфер, может сразу
SetLength(Result, Len);
Rouse_ (2012-06-28 21:14:00) [14]
> Плохиш © (28.06.12 16:33) [5]
> Фи, в 21м веке живём уже :-)
Даже в 21 веке размер блока данных, требуемого функцией, извне константарно не задают :)
Плохиш (2012-06-28 16:33:00) [15]Фи, в 21м веке живём уже :-)
const
CSIDL_RECENT = $0011;
SUBLANG_RUSSIAN = $01;
LANG_SYSTEM_RUSSIAN = (SUBLANG_RUSSIAN shl 10) or LANG_RUSSIAN;
LOCALE_RUSSIAN = (SORT_DEFAULT shl 16) or LANG_SYSTEM_RUSSIAN;
...
var
wsDate: WideString;
idx: Integer;
...
idx := 127;
SetLength(wsDate, idx);
idx := GetDateFormatW(LOCALE_RUSSIAN, DATE_LONGDATE, nil, nil{'dd MMMM yyyy'}, @wsDate[1], idx);
MessageBoxW(0, @wsDate[1], 'Date', MB_OK);
Омлет (2012-06-28 12:06:00) [16]
DateTimeToString(Str, 'dd mmmm yyyy', StrToDate('21.12.2012'));
Str := Str + ' г';
procedure InitMonths;
const _M: array[1..12]of string = ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
var i: integer;
begin
for i := 1 to 12 do LongMonthNames[i] := _M[i];
end;
initialization
InitMonths;
Rouse_ (2012-06-28 11:49:00) [17]Показывать будет в дефолтовой системной локали, если нужно в других локалях - меняй первый параметр.
Rouse_ (2012-06-28 11:48:00) [18]
function GetFormatedDate(Value: TDateTime): string;
var
ST: TSystemTime;
Buffer: array of Char;
Len: Integer;
begin
Result := '';
DateTimeToSystemTime(Value, ST);
Len := GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_LONGDATE, @ST, nil, nil, 0);
if Len > 0 then
begin
SetLength(Buffer, Len);
GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_LONGDATE, @ST, nil, @Buffer[0], Len);
Result := PChar(Buffer);
end;
end;
Anatoly Podgoretsky (2012-06-28 11:40:00) [19]> начинающий41 (28.06.2012 11:29:00) [0]
И на остальные несколько тысяч языков.