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

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

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

ты дольше писал.
...
Рейтинг: 0 / 0
06.05.2018, 19:47
    #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
06.05.2018, 20:13
    #39641061
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить написания дня недели и месяца из локали?
Страдалецъв системе уже естьи на форуме есть ...
...
Рейтинг: 0 / 0
06.05.2018, 20:47
    #39641073
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить написания дня недели и месяца из локали?
СтрадалецъЯ и сам могу список сделать, но вопрос то как извлечь эти данные из системы.
Нет их в системе. Ну, только в новых Win вроде есть.
...
Рейтинг: 0 / 0
07.05.2018, 06:12
    #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
07.05.2018, 14:47
    #39641441
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить написания дня недели и месяца из локали?
Страдалецъ,

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

странно.
я получаю "мая" и "января" .
использую стандартную функцию GetDateFormat().
что я делаю не так?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.05.2018, 16:37
    #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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить написания дня недели и месяца из локали? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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