我正在将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结构。
有谁知道我在哪里可以得到该功能的代码-否则,将提示如何“推出自己的”等效功能的提示?
最佳答案
在Linux上等效于GetDateFormat
的调用(实际上是普通的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
是字符常量,当它是指向'January'
将放置其结果的缓冲区的指针时。