Получить названия месяцев для локали
От: TheBeginner  
Дата: 11.11.23 14:57
Оценка:
Как получить не просто названия, а в разных для отображения даты падежах. Например, "ноября" а не "ноябрь"?

Для GetLocaleInfoEx есть только параметры LOCALE_SMONTHNAME11, LOCALE_SABBREVMONTHNAME11, для которых получаем соответственно "Ноябрь" и "ноя".
Вызов GetDateFormatEx вида:
GetDateFormatEx(L"ru-RU", NULL, NULL, L"MMMM", szBuf, 128, NULL);
с заданным форматом "MMMM" ожидаемо возвращает "Ноябрь", как и сказано в MSDN:

MMMM — Format month as its full name. The function uses the LOCALE_SMONTHNAME value associated with the specified locale.


С флагом DATE_YEARMONTH получаем "Ноябрь 2023"
С Флагом DATE_LONGDATE — "11 ноября 2023г."

Естественно это нужно не только для одной локали. Вычленять названия месяцев из DATE_LONGDATE для разных локалей тот еще квест.
Есть ли какая функция для получения названий месяцев в разных падежах?
Re: Получить названия месяцев для локали
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.11.23 15:21
Оценка: 3 (1)
Здравствуйте, TheBeginner, Вы писали:

TB>Как получить не просто названия, а в разных для отображения даты падежах. Например, "ноября" а не "ноябрь"?


MS брешет, что

LOCALE_SMONTHNAME1 Native long name for January. The maximum number of characters allowed for this string is 80, including a terminating null character. Note: Calling the GetLocaleInfo or GetLocaleInfoEx function with a LOCALE_SMONTHNAME* constant returns the standalone, or nominative, form of the month name. To get the genitive form of the month name, the application calls GetDateFormat or GetDateFormatEx with a date picture of ddMMMM and removes the two digits from the beginning of the retrieved string.

Re[2]: Получить названия месяцев для локали
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.11.23 15:29
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>

ЕМ>LOCALE_SMONTHNAME1 Native long name for January. The maximum number of characters allowed for this string is 80, including a terminating null character. Note: Calling the GetLocaleInfo or GetLocaleInfoEx function with a LOCALE_SMONTHNAME* constant returns the standalone, or nominative, form of the month name. To get the genitive form of the month name, the application calls GetDateFormat or GetDateFormatEx with a date picture of ddMMMM and removes the two digits from the beginning of the retrieved string.


А реальная реализация локали — это, небось, код (.DLL), а не таблица? И этот вот код и знает, как склонять свои слова...
Re[3]: Получить названия месяцев для локали
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.11.23 15:34
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А реальная реализация локали — это, небось, код (.DLL), а не таблица?


Скорее всего.

Pzz>И этот вот код и знает, как склонять свои слова...


А еще, подозреваю, в некоторых языках падежные формы в "10 ноября", "с ноября, "до ноября и т.п. не одинаковы.
Re[2]: Получить названия месяцев для локали
От: TheBeginner  
Дата: 11.11.23 15:37
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

Спасибо.
Пробежал по диагонали и не заметил
Re[4]: Получить названия месяцев для локали
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.11.23 15:44
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

Pzz>>И этот вот код и знает, как склонять свои слова...


ЕМ>А еще, подозреваю, в некоторых языках падежные формы в "10 ноября", "с ноября, "до ноября и т.п. не одинаковы.


Ну да. Но это не проблема, если каждому языку положена своя DLL-ка.

Интересно, ведь есть, наверное, языки, в которых эта форма еще и от значения самого числительного зависит.
Re[4]: Получить названия месяцев для локали
От: TheBeginner  
Дата: 11.11.23 15:45
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>А еще, подозреваю, в некоторых языках падежные формы в "10 ноября", "с ноября, "до ноября и т.п. не одинаковы.


Это возможно, но вникать в это не хочется. Мне нужны только варианты названий месяцев в написании дат.
Re[5]: Получить названия месяцев для локали
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.11.23 15:58
Оценка:
Здравствуйте, TheBeginner, Вы писали:

TB>Мне нужны только варианты названий месяцев в написании дат.


Хм, а что Вы тогда собираетесь с ними делать?
Re[6]: Получить названия месяцев для локали
От: TheBeginner  
Дата: 11.11.23 16:14
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Хм, а что Вы тогда собираетесь с ними делать?


Для своего парсера дат, времени и тд.
Re[7]: Получить названия месяцев для локали
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.11.23 17:32
Оценка:
Здравствуйте, TheBeginner, Вы писали:

TB>Для своего парсера дат, времени и тд.


Не понял. Если Вам не нужно названия месяца в отрыве от конкретной даты, то зачем извлекать его из строки даты, которую отдает система?
Re[8]: Получить названия месяцев для локали
От: TheBeginner  
Дата: 13.11.23 16:28
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Не понял. Если Вам не нужно названия месяца в отрыве от конкретной даты, то зачем извлекать его из строки даты, которую отдает система?


Для определения чем является строка — датой, временем, денежным числом тд. И второе — для преобразования этой строки в соответствующий формат.
То есть примерно то, что делает Excel при открытии например, CSV файла, когда текстовые поля преобразуются в нужный формат ячеек.

и названия месяцев мне конечно нужны отдельно от конкретных дат
Отредактировано 13.11.2023 16:31 TheBeginner . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.