簡體   English   中英

如何找到給定日期的星期幾“ tm_wday”?

[英]How to find the day of the week `tm_wday` from a given date?

為了找到給定日期的天(數字),我使用<ctime>編寫了以下代碼:

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; 但它打印5
實際上, tm_wday給出一致的結果,但相差3天。
怎么了

您輸入的月份錯誤, tm_mon是自一月以來的偏移量,因此七月是6。

tm_mon自一月以來的月數,范圍為0到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。

您得到無效輸出的原因是您使用了錯誤的月份。 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

現場例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM