2015-07-21 68 views
0

要找到一個給定日期當天(數),我使用<ctime>寫了下面的代碼:如何從給定日期查找「tm_wday」周的哪一天?

tm time {ANY_SECOND, ANY_MINUTE, ANY_HOUR, 21, 7, 2015 - 1900}; 
mktime(&time); //       today's date      
PRINT(time.tm_wday); // prints 5 instead of 2 for Tuesday 

根據該文件,tm_wday可容納值之間[0-6],其中0是星期天。因此,對於星期二(今天),它應該打印2;但它prints 5
實際上tm_wday給出了一致的結果,但相差3天。
這裏有什麼問題?

+0

選擇一種語言。 C或C++並堅持下去。獲得答案後不要更改您的代碼。它通常會使答案無效。 –

+0

@SouravGhosh,我沒有看到只需要堅持其中的一個。分別以C和C++提供''和''。將兩個標籤都打開後可以提高可視性。代碼沒有改變,只是從代碼中刪除了'std ::',以避免有人從C中移除。這沒有什麼區別。 – iammilind

+1

你的代碼是'C'。爲什麼要標記'C++'呢? –

回答

4

你得到了錯誤的一個月,tm_mon是一月以來的偏移,所以7月份是6.從手冊頁:

tm_mon自1月以來的月數,範圍爲0 t Ø11

此輸出2

#include <stdio.h> 
#include <string.h> 
#include <time.h> 

int main(void) { 
    struct tm time; 
    memset(&time, 0, sizeof(time)); 

    time.tm_mday = 21; 
    time.tm_mon = 6; 
    time.tm_year = 2015-1900; 

    mktime(&time); 

    printf("%d\n", time.tm_wday); 

    return 0; 
} 

請注意,您應該memset(3)或類似的初始化等領域爲0。

+0

我的不好。我從來不在乎檢查月份:-)。使用大括號初始值設定項,我相信剩下的字段會自動初始化爲0。因此'memset()'不是必需的。 – iammilind

0

您得到無效輸出的原因是您使用錯誤的月份。 tm_mon從0開始,而不是1.您可以通過使用此代碼中看到tghis:

tm time {50, 50, 12, 21, 7, 2015 - 1900}; 
time_t epoch = mktime(&time); 
printf("%s", asctime(gmtime(&epoch))); 

輸出:

Fri Aug 21 12:50:50 2015 

Live Example

相關問題