开发者

Implementation code for GetDateFormat Win32 function

I am porting some legacy code from windows to Linux (Ubuntu Karmic to be precise).

I have come across a Win32 function GetDateFormat().

The statements I need to port over are called like this:

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

OR

GetDateFormat(LOCALE_US开发者_StackOverflow社区ER_DEFAULT, 0, &datetime, "MMMM", 'May', 30);

Where datetime is a SYSTEMTIME struct.

Does anyone know where I can get the code for the function - or failing that, tips on how to "roll my own" equivalent function?


The Linux equivalent (actually, plain ANSI C) to a call to GetDateFormat like this:

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

is:

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);

(where datetime is now a struct tm rather than a SYSTEMTIME)

You may not need to worry about setting the locale each time and setting it back - if you are happy for all of your date/time formatting to be done in the user default locale (which is usual), then you can just call setlocale(LC_TIME, ""); once at program startup and be done with it.

Note however that the values your code is passing to GetDateFormat in the lpDateStr and cchDate parameters (second-last and last respectively) do not make sense. 'January' is a character constant, when it should be a pointer to a buffer where GetDateFormat will place its result.


The Win32 GetDateFormat function should be equivalent to the strftime function in the time.h header.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜