powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить написания дня недели и месяца из локали?
13 сообщений из 13, страница 1 из 1
Как получить написания дня недели и месяца из локали?
    #39640922
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как известно есть функция FormatDateTime где в качестве параметра можно задать формат представления даты:
FormatDateTime('d mmm yyyy', Now)
но мы получим некрасивое написание месяца т.е. май, январь и т.д., а хотелось бы мая, января и т.д.
Конечно можно сделать текстовый массив, но если текущая локаль не русская то выйдет некрасиво, а ведь в системе уже есть правильный список месяцев - отсюда вопрос, как его выдрать?
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39640933
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты дольше писал
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39640952
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык ответа то все равно нет. Я могу еще пол страницы написать, если это поможет :)
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641013
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В .net есть DateTimeFormatInfo::MonthGenitiveNames, а нам - "ручками".
Или воспользоваться подручными средствами. Например, некоторые СУБД умеют такое.
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641026
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я и сам могу список сделать, но вопрос то как извлечь эти данные из системы.
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641044
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,

гугл пробовал спрашивать? одна из первых ссылок поиска по FormatDateTime:

http://www.delphibasics.ru/FormatDateTime.php

ты дольше писал.
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641048
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
    s: String;
    MyFS: TFormatSettings;
begin
  with MyFS do
  begin
    LongMonthNames[1]:= 'января';
    LongMonthNames[2]:= 'февраля';
    LongMonthNames[3]:= 'марта';
    LongMonthNames[4]:= 'апреля';
    LongMonthNames[5]:= 'мая';
    LongMonthNames[6]:= 'июня';
    LongMonthNames[7]:= 'июля';
    LongMonthNames[8]:= 'августа';
    LongMonthNames[9]:= 'сентября';
    LongMonthNames[10]:= 'октября';
    LongMonthNames[11]:= 'ноября';
    LongMonthNames[12]:= 'декабря';
  end;

  Memo1.Clear;

  with DefaultFormatSettings do
  begin
    for i:= Low(LongMonthNames) to High(LongMonthNames) do
      Memo1.Lines.Add(LongMonthNames[i] + '/' + MyFS.LongMonthNames[i]);
  end;
  Memo1.Lines.Add('======================');
  Memo1.Lines.Add('');
  Memo1.Lines.Add('Сегодня: ' + FormatDateTime('d mmmm yyyy', Now, MyFS));
end;  

...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641061
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъв системе уже естьи на форуме есть ...
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641073
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъЯ и сам могу список сделать, но вопрос то как извлечь эти данные из системы.
Нет их в системе. Ну, только в новых Win вроде есть.
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641180
Aniskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Windows 7 и выше.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
function GetCalendarInfo(Locale: LCID; Calendar: DWORD; CalType: DWORD; lpCalData: LPTSTR;
  cchData: Integer; lpValue: LPDWORD): Integer; stdcall; external kernel32 name 'GetCalendarInfoW';

const
  LOCALE_RETURN_GENITIVE_NAMES = $10000000;   //Flag to return the Genitive forms of month names
  LOCALE_ALLOW_NEUTRAL_NAMES   = $08000000;   //Flag to allow returning neutral names/lcids for name conversion

  CAL_GREGORIAN                = 1;      // Gregorian (localized) calendar

  CAL_SMONTHNAME1           = $00000015;  // native name for January
  CAL_SMONTHNAME2           = $00000016;  // native name for February
  CAL_SMONTHNAME3           = $00000017;  // native name for March
  CAL_SMONTHNAME4           = $00000018;  // native name for April
  CAL_SMONTHNAME5           = $00000019;  // native name for May
  CAL_SMONTHNAME6           = $0000001a;  // native name for June
  CAL_SMONTHNAME7           = $0000001b;  // native name for July
  CAL_SMONTHNAME8           = $0000001c;  // native name for August
  CAL_SMONTHNAME9           = $0000001d;  // native name for September
  CAL_SMONTHNAME10          = $0000001e;  // native name for October
  CAL_SMONTHNAME11          = $0000001f;  // native name for November
  CAL_SMONTHNAME12          = $00000020;  // native name for December
  CAL_SMONTHNAME13          = $00000021;  // native name for 13th month (if any)

// AIndex is 1-based
function GetMonthName(AIndex: Integer): UnicodeString;
var
  CalType: DWORD;
  L: Integer;
begin
  Result := '';
  CalType := (CAL_SMONTHNAME1 + AIndex - 1) or LOCALE_RETURN_GENITIVE_NAMES;
  L := GetCalendarInfo(LOCALE_USER_DEFAULT, CAL_GREGORIAN, CalType, nil, 0, nil);
  if L < 2 then Exit;
  SetLength(Result, L - 1);
  GetCalendarInfo(LOCALE_USER_DEFAULT, CAL_GREGORIAN, CalType, PWideChar(Result), L, nil);
end;
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641441
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,

GetLocaleInfo
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641533
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.05.2018 13:15, Страдалецъ пишет:
> мы получим некрасивое написание месяца т.е. май, январь и т.д., а хотелось бы мая, января и т.д.

странно.
я получаю "мая" и "января" .
использую стандартную функцию GetDateFormat().
что я делаю не так?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить написания дня недели и месяца из локали?
    #39641561
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

точно, какой же ты лапочка!

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function GetGenStrDate(aDate: TDate): string;
var
  i: integer;
  s: SystemTime;
begin
  DateTimeToSystemTime(aDate, s);
  SetString(Result, nil, 42);
  i := GetDateFormat(LOCALE_USER_DEFAULT, 0, @s, 'd MMMM yyyy', PChar(Result), 42);
  SetLength(Result, Pred(i));
end;


...ну, надо чуть подправить для юникодных строк.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить написания дня недели и месяца из локали?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]