注:沒有測試,但考慮到目前的一年,這應該這樣做:
const char *months[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep",
"Oct","Nov","dec","Jan"};
/* Start with January 1st of the current year */
struct tm curYear={
0, // secs
0, // mins
0, // hours
1, // Day of month
0, // Month (Jan)
year,
0, // wday
0, // yday
0}; // isdst
/* Offset the number of weeks specified */
time_t secsSinceEpoch=mktime(&curYear)+
weekNum*86400*7; /* Shift by number of weeks */
struct tm *candidateDate=gmtime(&secsSinceEpoch);
/* If the candidate date is not a Monday, shift it so that it is */
if (candidateDate->tm_wday!=1)
{
secsSinceEpoch+=(86400*(candidateDate->tm_wday-1));
candidateDate=gmtime(&secsSinceEpoch);
}
printf("Mon %s %d",months[candidateDate->tm_mon],candidateDate->tm_mday\n");
您可能取決於究竟你的意思是43周調整公式驗證碼例如,給定的一年或符合ISO-8601。但是,這應該爲您提供良好的鍋爐板代碼來開始。您可能還想參數化一週中的某一天,以便它不會被硬編碼。
此外,如果您願意,可以通過截斷ctime
函數的結果來避開月份數組,並且必須格式化該函數,該函數的結果恰好顯示得比您要求的要多。您會傳遞一個指向secsSinceEpoch
值的指針,並截斷其輸出以僅顯示星期幾,月份的日期和月份名稱的縮寫。
祝你好運。 ISO-8601定義了「星期編號」的含義(即,如何確定第1周第1天的日期,具體取決於該年開始的一週中的哪一天)。具體而言,第1周是包含該年第一個星期四的任何一週。但不是每個人都一致使用這個定義。所以在你編寫任何代碼之前,你必須知道輸入的實際含義。 – 2010-10-30 17:39:58
可用解決方案取決於您的環境。 – 2010-10-30 17:40:25
還記得,這個答案會根據它的年份而改變。 – 2010-10-30 17:45:36