我正在将一些遗留代码从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结构。
有谁知道我可以在哪里获得该功能的代码 - 或者失败了,提示如何“滚动我自己的”等效功能?
答案 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, "");
一次并完成它。
但请注意,代码在GetDateFormat
和lpDateStr
参数中传递给cchDate
的值(分别为倒数第二个和最后一个)不 make感。 'January'
是一个字符常量,它应该是指向缓冲区的指针,GetDateFormat
将放置其结果。
答案 1 :(得分:0)
Win32 GetDateFormat函数应该等同于time.h头中的strftime函数。