![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить дату без года в формате текущих региональных настроек [D6, Win95/98, WinME, NT4, Win2k, WinXP]
Falcon © (2007-10-21 01:25:00)Нужно из даты TDate получить текстовую дату без года в формате текущих региональных настроек. Например, региональные настройки под США, дата 31 декабря 2007, нужно преобразовать в string: '12/31'.
Возможно ламерский вопрос. Но с ходу не смог найти решение, не нашел ничего и в инете.
DVM (2007-10-21 14:11:00) [21]
> Но это условно, решается на уровне ресурса SLongMonthNameOct.
И так для всех языков, даже для нас неизвестных делать будем? Как?
> Anatoly Podgoretsky © (21.10.07 14:00) [24]
> Ну и чего проблеме удалить все знаки, кроме d и M, учитывая
> литеральные встроеные константы. После удаления останется
> только "d MMMM" в данном случае.
если в региональных настройках стоит MMMM yyyy 'г.' (именно так без дня вообще, а почему бы и нет), то
> Нужно из даты TDate получить текстовую дату без года в формате
> текущих региональных настроек.
Невыполнимо. Если добавим от себя день, то это будет уже не соотвтствовать настройкам
Leonid Troyanovsky (2007-10-21 14:06:00) [22]
> DVM © (21.10.07 13:55) [22]
> Должно быть: 21 октября 2007 г.
LongMonthNames[10] := 'октября';
Но это условно, решается на уровне ресурса SLongMonthNameOct.
--
Regards, LVT.
DVM (2007-10-21 14:05:00) [23]
> Anatoly Podgoretsky © (21.10.07 14:00) [24]
Это понятно, но речь не об этом. см. [17]. Есть функция в Делфи выводящая полный формат даты на нормальном языке или нет?
Anatoly Podgoretsky (2007-10-21 14:00:00) [24]> DVM (21.10.2007 13:55:22) [22]
Ну и чего проблеме удалить все знаки, кроме d и M, учитывая литеральные встроеные константы. После удаления останется только "d MMMM" в данном случае.
DVM (2007-10-21 13:57:00) [25]
> Дельфийский подход иной (хуже или лучше - это другой вопрос).
значит [18] это не ответ на вопрос [17].
DVM (2007-10-21 13:55:00) [26]
> Leonid Troyanovsky © (21.10.07 13:43) [18]
Дельфийская FormatDateTime(LongDateFormat, Date) выводит дату вида:
21 Октябрь 2007 г.
Это при маске d MMMM yyyy 'г.'
Должно быть: 21 октября 2007 г.
Leonid Troyanovsky (2007-10-21 13:54:00) [27]
> DVM © (21.10.07 13:48) [20]
> Сравните [18] и
Зачем?
Локализация приложения - более сложная проблема,
чем некоторые частные решения.
Дельфийский подход иной (хуже или лучше - это другой вопрос).
--
Regards, LVT.
DVM (2007-10-21 13:48:00) [28]
> Leonid Troyanovsky © (21.10.07 13:43) [18]
Сравните [18] и
function GetLongDate: string;
var
st: TSystemTime;
Date, FormatString: PChar;
DateSize, FormatStringSize: integer;
begin
Result := '';
FormatStringSize := GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SLONGDATE, nil, 0);
GetMem(FormatString, FormatStringSize * SizeOf(Char));
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SLONGDATE, FormatString, FormatStringSize);
GetLocalTime(st);
DateSize := GetDateFormat(LOCALE_USER_DEFAULT, 0, nil, FormatString, nil, 0);
GetMem(Date, DateSize * SizeOf(Char));
GetDateFormat(LOCALE_USER_DEFAULT, 0, @st, FormatString, Date, DateSize * SizeOf(Char));
result := Date;
FreeMem(Date);
FreeMem(FormatString);
end;
Leonid Troyanovsky (2007-10-21 13:47:00) [29]
> sniknik © (21.10.07 11:12) [9]
> типа убрать из маски "yy.." ([5])) необходимое из вопроса
> не проблема.
И еще учесть, что разделитель даты может быть не односимвольный.
Да и еще многие тонкости. Задача, в общем случае, нетривиальна.
Проще, IMHO, спросить юзера, как он хочет видеть оное.
--
Regards, LVT.
Leonid Troyanovsky (2007-10-21 13:43:00) [30]
> DVM © (21.10.07 13:35) [17]
> Видимо. Может подскажете функцию Delphi для получения даты
> в полном формате (для региональных настроек "русский" это
> 21 октября 2007).
FormatDateTime(LongDateFormat, Date)
--
Regards, LVT.
DVM (2007-10-21 13:35:00) [31]
> Видимо, еще многое осталось незамеченным.
Видимо. Может подскажете функцию Delphi для получения даты в полном формате (для региональных настроек "русский" это 21 октября 2007).
> Falcon
А на самом деле, задача неразрешимая. Даже если мы получим текщую строку форматирования даты (через GetLocaleInfo), то в ней может действительно отстутствовать как день так и месяц (их запросто могли убрать оттуда пользователи).
Leonid Troyanovsky (2007-10-21 13:14:00) [32]
> DVM © (21.10.07 13:01) [15]
> насколько я знаю, нет функции, способной вывести дату или
> время с учетом региональных настроек.
Видимо, еще многое осталось незамеченным.
--
Regards, LVT.
DVM (2007-10-21 13:01:00) [33]
> DrPass © (21.10.07 12:53) [14]
Да я сразу не заметил, что ему из TDateTime. А в делфи, насколько я знаю, нет функции, способной вывести дату или время с учетом региональных настроек.
DrPass (2007-10-21 12:53:00) [34]
> DVM © (21.10.07 12:21) [11]
А зачем все это? Есть же готовые библиотечные функции, да к вопросу автора никакого отношения не имеет...
DVM (2007-10-21 12:29:00) [35]Но [11] это для TSystemTime. Для TDateTime лучше сделать FormatDateTime как советовали выше.
DVM (2007-10-21 12:23:00) [36][11] выводит дату с учетом региональных настроек. Тип вывода даты меняется в GetLocaleInfo параметр LOCALE_SSHORTDATE
DVM (2007-10-21 12:21:00) [37]function GetShortDate: string; // 01.01.2003
var
st: TSystemTime;
Date, FormatString: PChar;
DateSize, FormatStringSize: integer;
begin
Result := '';
FormatStringSize := GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, nil, 0);
GetMem(FormatString, FormatStringSize * SizeOf(Char));
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, FormatString, FormatStringSize);
GetLocalTime(st);
DateSize := GetDateFormat(LOCALE_USER_DEFAULT, 0, nil, FormatString, nil, 0);
GetMem(Date, DateSize * SizeOf(Char));
GetDateFormat(LOCALE_USER_DEFAULT, 0, @st, FormatString, Date, DateSize * SizeOf(Char));
result := Date;
FreeMem(Date);
FreeMem(FormatString);
end;
Jump (2007-10-21 12:18:00) [38]Изначально ветка не заслуживает перемещения в "Начинающие", имхо.
Думаешь, не заслуживает?
Нужно из даты TDate получить текстовую дату без года в формате текущих региональных настроек.
А если пользователь убрал в региональных настройках отображение дня (mm/yyyy)? Или месяца(dd/yyyy)? Или на самом деле убрал год(dd/mm)? Что делать думаешь? Или надеешься, что пользователь такого никогда не сделает? Не надейся. Региональные настройки могут быть любыми. В том числе - без месяца и дня. В таком контексте твой вопрос вообще теряет всякий смысл.
Я бы на твоем месте сделал:
FormatDateTime('dd/mmm', Date);
и не парил бы себе мозги.
sniknik (2007-10-21 11:12:00) [39]> Изначально ветка не заслуживает перемещения в "Начинающие", имхо.
значит он их сам найдет, инфы дано уже с перебором.
> А при чём тут всякого рода переменные?
есть такие переменные в дельфи куда копируются локальные в том числе региональных настройки среды... и в которых есть вся необходимая инфа, и что разделителем в дате и порядок число/месяц (маска), т.е. посмотреть и составить(/настроить, типа убрать из маски "yy.." ([5])) необходимое из вопроса не проблема.
Германн (2007-10-21 03:58:00) [40]
> Плохиш © (21.10.07 03:44) [7]
>
>
Изначально ветка не заслуживает перемещения в "Начинающие", имхо.
А при чём тут всякого рода переменные?