2009-11-13 62 views
1

我需要一個C語言的Linux平臺上的小型獨立庫,例如在(2009,11,13)提供時將返回「星期五」。我希望它是區域意識,意思是返回用戶設置的語言的日期和月份名稱。C中的Linux日期時間/區域設置庫

有什麼建議嗎?

回答

1

您可以聯繫在一起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); 
+0

可能的工作,但它會通過應用程序的當前語言環境的影響,並且如果一天名稱的本地格式是太長,會溢出daybuf []。 – dajobe 2009-11-13 07:01:19

+0

@dajobe - 要求提供某些特定語言環境的問題。此外,它不會溢出daybuf,因爲strftime的第二個參數設置了將要寫入的最大字符數。 – 2009-11-13 07:14:30

+0

它不會溢出緩衝區,但它會在某些情況下保持緩衝區不變。此代碼的示例失敗測試用例是語言環境ru_RU.UTF-8和YEAR = 2009,MONTH = 11,DAY = 30。這給出了「Понедельник」(「Monday」)作爲結果,它不適合20個字節(如果我們包含終止零字節,它的存儲是23個字節)。 – 2009-11-14 03:03:19

相關問題