2010-05-28 32 views
0

我將一些遺留代碼從windows移植到Linux(確切地說,Ubuntu Karmic)。GetDateFormat Win32函數的實現代碼

我遇到了Win32函數GetDateFormat()。

我需要移植了被稱爲像這樣的語句:

GetDateFormat(LOCALE_USER_DEFAULT, 0, &datetime, "MMMM", 'January', 31); 

OR 

GetDateFormat(LOCALE_USER_DEFAULT, 0, &datetime, "MMMM", 'May', 30); 

凡日期時間爲一個SYSTEMTIME結構。

有沒有人知道我在哪裏可以獲得該功能的代碼 - 或者失敗,提示如何「滾動自己的」等效功能?

回答

1

Linux的等效(實際上,普通ANSI C)到一個呼叫到GetDateFormat這樣的:

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

然而要注意的價值觀您的代碼傳遞給GetDateFormatlpDateStrcchDate參數(倒數第二和去年分別)做有意義。 'January'是一個字符常量,它應該是指向緩衝區的指針,其中GetDateFormat將放置其結果。