C语言中的Linux datetime/locale库

C语言中的Linux datetime/locale库,c,linux,C,Linux,我需要一个在linux平台上的C语言中的小型独立库,例如,当提供(2009,11,13)时,它将返回“Friday”。我希望它是地区意识,这意味着,返回日和月的名称在语言设置的用户 有什么建议吗?您可以将mktime和strftime结合起来: char daybuf[20]; struct tm time_str; time_str.tm_year = YEAR - 1900; time_str.tm_mon = MONTH - 1; time_str.tm_mday = DAY; time

我需要一个在linux平台上的C语言中的小型独立库,例如,当提供(2009,11,13)时,它将返回“Friday”。我希望它是地区意识,这意味着,返回日和月的名称在语言设置的用户


有什么建议吗?

您可以将mktime和strftime结合起来:

char daybuf[20];
struct tm time_str;

time_str.tm_year = YEAR - 1900;
time_str.tm_mon = MONTH - 1;
time_str.tm_mday = DAY;
time_str.tm_hour = 0;
time_str.tm_min = 0;
time_str.tm_sec = 1;
time_str.tm_isdst = -1;
if (mktime(&time_str) != -1)
    strftime(daybuf, sizeof(daybuf), "%A", &time_str);

您可以将mktime和strftime绑定在一起以实现此目的:

char daybuf[20];
struct tm time_str;

time_str.tm_year = YEAR - 1900;
time_str.tm_mon = MONTH - 1;
time_str.tm_mday = DAY;
time_str.tm_hour = 0;
time_str.tm_min = 0;
time_str.tm_sec = 1;
time_str.tm_isdst = -1;
if (mktime(&time_str) != -1)
    strftime(daybuf, sizeof(daybuf), "%A", &time_str);

这可能会起作用,但它会受到应用程序当前区域设置的影响,如果特定于区域设置的日期名称格式太长,它将溢出daybuf[]。@dajobe-该问题要求特定于区域设置的内容。另外,它不会使daybuf溢出,因为它是strftime设置要写入的最大字符数的第二个参数。它不会使缓冲区溢出,但在某些情况下会使缓冲区保持不变。这段代码的一个失败测试用例示例是区域设置ru_ru.UTF-8和YEAR=2009、MONTH=11、DAY=30。这就产生了“Пццццццццццццццццццццццццц109@dajobe-这个问题要求特定于区域设置的内容。另外,它不会使daybuf溢出,因为它是strftime设置要写入的最大字符数的第二个参数。它不会使缓冲区溢出,但在某些情况下会使缓冲区保持不变。这段代码的一个失败测试用例示例是区域设置ru_ru.UTF-8和YEAR=2009、MONTH=11、DAY=30。这就产生了“Пцццццццццццццццццц。