Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 查找一个月的第一天所在的星期几的结果不正确_C_Time.h - Fatal编程技术网

C 查找一个月的第一天所在的星期几的结果不正确

C 查找一个月的第一天所在的星期几的结果不正确,c,time.h,C,Time.h,我有以下C代码: #include <stdio.h> #include <time.h> struct tm tm; int startDayOfWeek; int findStartDateInMonth(int month,int year) { tm.tm_mon = month; tm.tm_year = year - 1900; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm

我有以下C代码:

#include <stdio.h>
#include <time.h>
struct tm tm;
int startDayOfWeek;
int findStartDateInMonth(int month,int year)       
{
    tm.tm_mon = month;
    tm.tm_year = year - 1900;
    tm.tm_mday = 1;
    tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
    tm.tm_isdst = -1;
    if(mktime(&tm) != -1)
    {
        startDayOfWeek = tm.tm_wday;
    }
    return startDayOfWeek;
}
int main(void) {

char *wday[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday"};
int a = findStartDateInMonth(8,2018);
if(mktime(&tm) != -1)
    printf("%s\n", wday[tm.tm_wday]);
  return 0;
}
#包括
#包括
struct-tm;
int startDayOfWeek;
int findStartDateInMonth(int月,int年)
{
tm.tm_mon=月份;
tm.tm_年=1900年;
tm.tmmday=1;
tm.tm_小时=tm.tm_分钟=tm.tm_秒=0;
tm.tm_isdst=-1;
如果(mktime&tm)!=-1)
{
startDayOfWeek=tm.tm_wday;
}
返回startDayOfWeek;
}
内部主(空){
char*wday[]={“星期日”、“星期一”、“星期二”、“星期三”,
“星期四”、“星期五”、“星期六”};
int a=findStartDateInMonth(82018);
如果(mktime&tm)!=-1)
printf(“%s\n”,wday[tm.tm_wday]);
返回0;
}
代码返回星期六,这是错误的,因为2018年8月1日是星期三


非常感谢您的帮助。

struct tm的定义中有一个陷阱:

int tm_mday; // day of the month — [1, 31]
int tm_mon;  // months since January — [0, 11]
也就是说,
tm_mday
是基于1的,但是
tm_mon
是基于0的。将其设置为
8
意味着您看到的是9月1日,而不是8月1日(2018-09-01确实是周六)

试一试


struct tm
的定义中有一个陷阱:

int tm_mday; // day of the month — [1, 31]
int tm_mon;  // months since January — [0, 11]
也就是说,
tm_mday
是基于1的,但是
tm_mon
是基于0的。将其设置为
8
意味着您看到的是9月1日,而不是8月1日(2018-09-01确实是周六)

试一试

tm_mon
的范围为0-11

因此,赋值时需要将1减去
tm_mon

tm.tm_mon = month - 1;
这应该可以解决您的问题。

tm\u mon
的范围为0-11

因此,赋值时需要将1减去
tm_mon

tm.tm_mon = month - 1;
这应该能解决你的问题