Код реализации для функции Win32 GetDateFormat - PullRequest
0 голосов
/ 28 мая 2010

Я портирую некоторый устаревший код из Windows в Linux (точнее, в Ubuntu Karmic).

Я натолкнулся на функцию Win32 GetDateFormat ().

Операторы, которые мне нужно перенести, называются так:

GetDateFormat(LOCALE_USER_DEFAULT, 0, &datetime, "MMMM", 'January', 31);

OR

GetDateFormat(LOCALE_USER_DEFAULT, 0, &datetime, "MMMM", 'May', 30);

Где datetime - это структура SYSTEMTIME.

Кто-нибудь знает, где я могу получить код для функции - или если нет, советы о том, как «свернуть мою» эквивалентную функцию?

Ответы [ 2 ]

1 голос
/ 28 мая 2010

Эквивалент Linux (на самом деле, обычный ANSI C) для вызова GetDateFormat, например:

GetDateFormat(LOCALE_USER_DEFAULT, 0, &datetime, "MMMM", date_str, len);

является:

char *old_lc_time;

/* Set LC_TIME locale to user default */
old_lc_time = setlocale(LC_TIME, NULL);
setlocale(LC_TIME, "");

strftime(date_str, len, "%B", &datetime);

/* Set LC_TIME locale back */
setlocale(LC_TIME, old_lc_time);

(где datetime теперь struct tm, а не SYSTEMTIME)

Вам не нужно беспокоиться о том, чтобы каждый раз устанавливать языковой стандарт и возвращать его обратно - если вы счастливы, что все вашего форматирования даты / времени будет выполнено в пользовательском языковом стандарте по умолчанию (что обычно ), тогда вы можете просто вызвать setlocale(LC_TIME, ""); один раз при запуске программы и покончить с этим.

Обратите внимание, что значения, которые ваш код передает GetDateFormat в параметрах lpDateStr и cchDate (второй-последний и последний соответственно), имеют смысл , а не . 'January' является символьной константой, когда она должна быть указателем на буфер, где GetDateFormat будет помещать свой результат.

0 голосов
/ 28 мая 2010

Функция Win32 GetDateFormat должна быть эквивалентна функции strftime в заголовке time.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...