GetDateFormat Win32函数的实现代码

时间:2010-05-28 01:03:44

标签: c datetime winapi ubuntu date

我正在将一些遗留代码从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 个答案:

答案 0 :(得分:1)

对这样的GetDateFormat调用的Linux等价物(实际上是普通的ANSI C):

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, "");一次并完成它。

但请注意,代码在GetDateFormatlpDateStr参数中传递给cchDate的值(分别为倒数第二个和最后一个) make感。 'January'是一个字符常量,它应该是指向缓冲区的指针,GetDateFormat将放置其结果。

答案 1 :(得分:0)

Win32 GetDateFormat函数应该等同于time.h头中的strftime函数。